【问题标题】:Rails : change user preference formRails:更改用户偏好表单
【发布时间】:2011-12-09 17:58:12
【问题描述】:

我有一个用户模型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

但偏好不会改变,我该怎么做?还有更好的方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 forms model-view-controller


    【解决方案1】:

    这不是一个好方法。你应该使用fields_for。它会让你的表格更干净。顺便说一句,您在控制器中所做的事情不起作用,因为您使用update_attributes 来更新您的模型,从而使您的分配无用。使用上面提到的fields_for 也将帮助您清洁控制器。但要小心,因为您的模型中肯定需要accepts_nested_attributes_for

    【讨论】:

    • 谢谢,我确信 Rails 中有一些漂亮的东西,但找不到:(.
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多