обновить значения флажка с отношением HABTM - Rails - PullRequest
1 голос
/ 15 февраля 2010

Привет, ребята, я использовал отношение has_and_belongs_to_many с примером флажков из Railscast Episode # 17 . У меня были некоторые проблемы, и теперь все работает нормально, кроме кнопки обновления, которая не будет работать.

вид редактирования выглядит так

<% form_for :users, :action => 'update'  do |f| %>
<% for interest in Interest.find(:all) %>
<div>
<%= check_box_tag "user[interest_ids][]", interest.id,
              @user.interests.include?(interest) %>
<%= interest.name %>
</div>
<% end %>
<p>
<%= f.submit 'Update' %>
</p>
<% end %>

а в контроллере у меня ....

def edit
  @user = User.find(session[:user_id])
end

 def update
  params[:user][:interest_ids] ||= []
  @user = User.find(session[:user_id])
  if @user.update_attributes(params[:user])
  flash[:notice]='User data was updated'
  redirect_to :action => 'index'
 else
  redirect_to :action => 'index'
 end  
end

Кнопка не является событием, которое выполняет перенаправление ... поэтому я не знаю, что происходит. Есть ли что-то в моей форме, что это портит? Я не совсем уверен, как создать кнопку и получить доступ к методу в контроллере с обновлениями модели и т. Д.

Я оглянулся на помощь и подумал, что это может быть из-за attr_accessible, поэтому я добавил =>

 attr_accessible :login, :email, :password, :password_confirmation, :interest_ids, :user

моей пользовательской модели, но все еще ничего ... Любая идея, почему моя форма не отправляется?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2010

Я поиграл с формой, и правильный код - это ==>

<% form_for @user do |f| %>
<% for interest in Interest.find(:all) %>
<div>
 <%= check_box_tag "user[interest_ids][]", interest.id, @user.interests.include?(interest) %>
 <%= interest.name %>
</div>
<% end %>
<p>
<%= f.submit 'Edit' %>
</p>
<% end %>

Я так счастлив! Таким образом, очевидно, проблема заключалась в следующем: пользователь, который должен быть объектом @ пользователь.

0 голосов
/ 15 февраля 2010

Тег check_box должен выглядеть так, чтобы он работал:

<%= check_box "user", "user_interest_ids", {:checked => @user.interests.include?(interest), :name => 'user[interest_ids][]'}, interest.id, nil %>

В моих объявлениях <-> ad_sizes habtm я использую этот код:

<% @ad_sizes.each do |s| %>
<li>
<%= check_box "ad", "ad_size_ids", {:checked => @ad.ad_sizes.include?(s), :id => "ad_size_#{s.name}", :class => 'checkbox', :name => 'ad[ad_size_ids][]'}, s.id, nil %>
<label class="checkbox" for="<%= "ad_size_#{s.name}" %>"><%= s.description %></label>
</li>
<% end %>
...