Rails: изменить форму пользовательских настроек - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть модель User, которая 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

Но настройки не изменились бы, как я могу это сделать?И есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Это не очень хороший способ сделать это. Вы должны использовать fields_for . Это сделает вашу форму чище. Кстати, то, что вы делаете в контроллере, не работает, потому что вы используете update_attributes для обновления вашей модели, что делает ваши назначения бесполезными. Использование вышеупомянутого fields_for также поможет вам очистить контроллер. Но будьте осторожны, потому что вам наверняка понадобится accepts_nested_attributes_for в вашей модели.

0 голосов
/ 09 декабря 2011
...