Rails如何将params从控制器传递到模型内的after_save

时间:2011-01-18 14:28:14

标签: html ruby-on-rails ruby

我有一个Rfq控制器我正在创建新的或更新现有的Rfqs,当我创建或更新对象被保存时,我想要的是因为我有引号数params我想用params中的引号更新line_items表保存Rfqs后,在quote_price列中显示[:quotes]

我知道它令人困惑,但是谁应该得到一些暗示我想问的暗示。

3 个答案:

答案 0 :(得分:12)

如果您尝试在模型中使用params哈希,则违反了MVC的原则。该模型应该独立于论点。如果您尝试执行以下操作:

# controller
Model.foo

# model
def foo
  params[:bar].reverse!
end

您应该执行以下操作:

# controller
Model.foo(params[:bar])

# model
def foo(foobar)
  foobar.reverse!
end

答案 1 :(得分:2)

老实说,如果它处理params,将这种类型的逻辑放在控制器中可能是一个好主意,以免你混淆模型和控制器的责任。

也就是说,在控制器

if @foo.save
  # Update line_items using params[:quotes]
end

答案 2 :(得分:1)

我认为您希望能够拥有一个保存主对象和所有子对象的表单。如果没有,请不要理会。

在rails中,这被命名为“nested_attributes”

你会把它添加到你的模型中:

accepts_nested_attributes_for :quotes
# assuming you have 
has_many :quotes

然后在表单视图中:

<% form.fields_for :quotes do |child_form| %>
  <%= child_form.text_field :name %>
<% end %>

在Ryan的博客上查看:Nested Attributes