обновите значения флажка с помощью HABTM relationship — Rails
-
20-09-2019 - |
Вопрос
Эй, ребята, я использовал отношение has_and_belongs_to_many с флажками в примере из Железнодорожный Выпуск #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
к моей пользовательской модели, но по-прежнему ничего...Есть идеи, почему моя форма не отправляется?
Решение
Я поигрался с формой и правильный код такой ==>
<% 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 %>
Я так счастлив!Очевидно, проблема заключалась в том, что :user должен быть объектом @user.
Другие советы
Тот самый 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 %>