Ruby on rails 如何将Rails中的附加参数从控制器传递到模型
我想在这些代码行(包括控制器和模型)中传递一个附加字段,比如item_id: 这意味着,我希望将我的item_id从控制器传递到模型,以便我可以在模型中进行一些自定义操作 这样做的最佳方式是什么(基于上述代码) ===截至2014年9月1日更新,了解更多详情=== 我有一个购物车和交易的关联,其中购物车有很多交易,交易属于购物车;下面是控制器Ruby on rails 如何将Rails中的附加参数从控制器传递到模型,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我想在这些代码行(包括控制器和模型)中传递一个附加字段,比如item_id: 这意味着,我希望将我的item_id从控制器传递到模型,以便我可以在模型中进行一些自定义操作 这样做的最佳方式是什么(基于上述代码) ===截至2014年9月1日更新,了解更多详情=== 我有一个购物车和交易的关联,其中购物车有很多交易,交易属于购物车;下面是控制器 # transactions_controller.rb (controller) def new @transaction = Transactio
# transactions_controller.rb (controller)
def new
@transaction = Transaction.new(app_token: params[:token])
end
模型中采用了以下方法:
# transaction.rb (model)
def app_token=(token)
write_attribute(:app_token, token)
# I want to add a few more lines of code here so that I can manipulate cart.id
end
我想在这里实现的是将cart.id传递到位于transaction.rb中的app_token方法中。请注意,这个cart.id并不意味着要保存到数据库中,我可以通过build中的create方法轻松地将它保存到数据库中,而是使用这个cart.id传递到方法中,以调用位于transaction.rb模型中的app_token方法中的其他方法。我这样做的原因是,我正在与之通信的服务返回一个令牌,我希望保留该令牌并执行另一个方法,该方法需要cart.id
因此,我只想了解,基于上述控制器和模型的给定格式,将这个cart.id传递到位于transaction.rb模型中的app_令牌方法(我希望用于该方法中的其他功能)的最推荐方式是什么
谢谢大家! 您不需要覆盖app\u令牌=
您不需要覆盖app_令牌=
您不需要覆盖app_令牌=
您不需要覆盖app_令牌=
属性 这主要取决于您是否将
item\u id
设置为虚拟属性或数据库中的属性
如果你有一个关联<代码>“外国人密钥”/代码>已经设置好了,你就可以打折我要写的东西了,但是如果你没有,你应该考虑以下内容:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
这将允许您传递所需的item\u id
(它将作为params[:item\u id]
加载到控制器中)。您还可以使用以下功能:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
#app/views/transactions/new.html.erb
这将使您能够将两个不同的属性发送到控制器,然后控制器可以按如下方式填充:
#app/controllers/transactions_controller.rb
class TransactionsController < ApplicationController
def new
@transaction = Transaction.new
end
def create
@transaction = Transaction.new transaction_params
@transaction.save
end
private
def transaction_params
params.require(:transaction).permit(:item_id, :token)
end
end
#app/controllers/transactions_controller.rb
类TransactionController
必须注意的是,
表单
方法只有在您的模型中定义了属性时才可行-无论是在数据库中,还是在虚拟(使用属性访问器
)属性
这主要取决于您是否将item\u id
设置为虚拟属性或数据库中的属性
如果你有一个关联<代码>“外国人密钥”/代码>已经设置好了,你就可以打折我要写的东西了,但是如果你没有,你应该考虑以下内容:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
这将允许您传递所需的item\u id
(它将作为params[:item\u id]
加载到控制器中)。您还可以使用以下功能:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
#app/views/transactions/new.html.erb
这将使您能够将两个不同的属性发送到控制器,然后控制器可以按如下方式填充:
#app/controllers/transactions_controller.rb
class TransactionsController < ApplicationController
def new
@transaction = Transaction.new
end
def create
@transaction = Transaction.new transaction_params
@transaction.save
end
private
def transaction_params
params.require(:transaction).permit(:item_id, :token)
end
end
#app/controllers/transactions_controller.rb
类TransactionController
必须注意的是,
表单
方法只有在您的模型中定义了属性时才可行-无论是在数据库中,还是在虚拟(使用属性访问器
)属性
这主要取决于您是否将item\u id
设置为虚拟属性或数据库中的属性
如果你有一个关联<代码>“外国人密钥”/代码>已经设置好了,你就可以打折我要写的东西了,但是如果你没有,你应该考虑以下内容:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
这将允许您传递所需的item\u id
(它将作为params[:item\u id]
加载到控制器中)。您还可以使用以下功能:
#app/models/transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :item # -> expects item_id by default
end
#app/views/transactions/new.html.erb
<%= form_for @transaction do |f| %>
<%= f.text_field :item_id %>
<%= f.text_field :token %>
<%= f.submit %>
<% end %>
#app/views/transactions/new.html.erb
这将使您能够将两个不同的属性发送到控制器,然后控制器可以按如下方式填充:
#app/controllers/transactions_controller.rb
class TransactionsController < ApplicationController
def new
@transaction = Transaction.new
end
def create
@transaction = Transaction.new transaction_params
@transaction.save
end
private
def transaction_params
params.require(:transaction).permit(:item_id, :token)
end
end
#app/controllers/transactions_controller.rb
类TransactionController
必须注意的是,
表单
方法只有在您的模型中定义了属性时才可行-无论是在数据库中,还是在虚拟(使用属性访问器
)属性
这主要取决于您是否将item\u id
设置为虚拟属性或数据库中的属性
如果你有一个关联<代码>“外国人密钥”/代码>已经设置好了,你就可以打折我要写的东西了,但是如果你没有,你应该考虑以下内容: