我有一个has_one :preference
的用户模型,但我想加入表单来更新用户和表单以更新他的偏好,所以在用户的表单中,我添加了:
<% if !@user.new_record? %>
<div class="field">
<%= label_tag 'user_preference_quote_type', 'Type de citations' %><br />
<%= text_field_tag 'user_preference_quote_type', @user.preference.quote_type %>
</div>
<div class="field">
<%= label_tag 'user_preference_locale', 'Langage' %><br />
<%= text_field_tag 'user_preference_locale', @user.preference.locale %>
</div>
<% end %>
在我的控制器中:
def update
@user = User.find(params[:id])
@user.preference.quote_type = params[:user_preference_quote_type]
@user.preference.locale = params[:user_preference_locale]
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to(@user, :notice => t('c.users.update')) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
但是偏好不会改变,我该怎么办呢?还有更好的方法吗?
答案 0 :(得分:2)
这不是一个很好的方法。您应该使用fields_for。它会使你的表格更清洁。顺便说一句,你在控制器中所做的事情是行不通的,因为你使用update_attributes
来更新你的模型,使你的分配无用。使用上面提到的fields_for
也可以帮助您清理控制器。但要小心,因为你的模型肯定需要accepts_nested_attributes_for。
答案 1 :(得分:0)
检查嵌套属性:{{3p>