0

我有一个用户模式谁has_one :preference,但我想加盟形式更新用户和形式来更新自己的偏好,所以在用户的​​体形,我说:Rails的:改变用户偏好的形式

<% if [email protected]_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 

但偏好不会改变,我该怎么办呢?有没有更好的方法来做到这一点?

回答

2

这不是一个好的方法。您应该使用fields_for。它会让你的表单更清洁。顺便说一下,你在控制器中所做的操作不起作用,因为你使用update_attributes来更新你的模型,使得你的模板无用。使用上面提到的fields_for也可以帮助您清理控制器。但要小心,因为你的模型肯定需要accepts_nested_attributes_for

+0

谢谢你,我肯定有一些美丽的东西这个Rails中,但无法找到它:(。 – Dorian