Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Rails中的附加参数从控制器传递到模型_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何将Rails中的附加参数从控制器传递到模型

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

我想在这些代码行(包括控制器和模型)中传递一个附加字段,比如item_id:

这意味着,我希望将我的item_id从控制器传递到模型,以便我可以在模型中进行一些自定义操作

这样做的最佳方式是什么(基于上述代码)

===截至2014年9月1日更新,了解更多详情===

我有一个购物车和交易的关联,其中购物车有很多交易,交易属于购物车;下面是控制器

# 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
设置为虚拟属性或数据库中的属性

如果你有一个关联<代码>“外国人密钥”/代码>已经设置好了,你就可以打折我要写的东西了,但是如果你没有,你应该考虑以下内容: