如何根据另一个属性值覆盖用户选择的属性

时间:2013-08-15 18:42:16

标签: ruby-on-rails

我有一个表单,我希望选中一个复选框来覆盖用户为另一个属性选择的值。

表格:

<%= form_for(@foo) do |f| %>
  <tr>      
    <th>FooType</th>
    <td><%= f.select :foo_type_id, options_from_collection_for_select(FooType.order(:name).all, "id", "name", @foo.cabinet_type_id) %></td>
</tr>
<tr>
  <th>Legacy Foo</th>
  <td><%= f.check_box :is_legacy %> </td>
</tr>

我在哪里放置代码来覆盖用户的选择:foo_type基于if:is_legacy被选中?我在保存新的Foo之后尝试添加update_attribute命令,但它似乎不起作用:

if @foo.save_standard and ! row.nil?
  #set foo type to 38u when it is a legacy foo
  if params[:is_legacy] == true
    @foo.update_attribute(foo_type_id, 2)
 end

1 个答案:

答案 0 :(得分:1)

我认为以下代码中存在一些错误:

if @foo.save_standard and ! row.nil?
  #set foo type to 38u when it is a legacy foo
  if params[:is_legacy] == true
    @foo.update_attribute(foo_type_id, 2)
  end
end

尝试:

if @foo.save_standard && row
  if params[:foo][:is_legacy]
    @foo.update_attribute(:foo_type_id, 2) # careful, this method do not fire callbacks
  end
end

假设您的实例对象是Foo类(可能不是)。如果没有,请替换

params[:foo]

无论你的实例类是什么。