Как редактировать одну модель с другого контроллера?

У меня есть 2 модели, пользователь и группа. пользователь имеет_одну группу и группу имеет_много пользователей.

У меня есть роль администратора, и роль администратора группы в моем классе способностей, который я хочу иметь, чтобы иметь возможность удалить пользователя из группы.

В моем представлении участников шоу в контроллере у меня есть оператор if, который добавляет кнопку удаления рядом с пользователем в списке, если наблюдатель является администратором или администратором группы.

#views/groups/show_members.erb
<% form_for @user, :remote => true, :url => { :controller => 'groups', :action => 'remove_user' } do |f| %>
  <%= f.hidden_field :user_id, :value => @user.id %>
  <%= f.hidden_field :group_id, :value => "" %>
  <%= image_submit_tag("remove-icon.png") %>
<% end %>

#groups_controller.rb
def remove_user
  @user = User.find(params[:user_id])
  @user.group_id = nil
  respond_to do |format|
    if @user.update_attributes(params[:user])
      format.html { redirect_to(@group, :notice => 'User was successfully Removed.') }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @group.errors, :status => :unprocessable_entity }
    end
  end
end

Ошибка, которую я получаю:

Couldn't find User without an ID
Rails.root: /home/leon/sites/VIS

Application Trace | Framework Trace | Full Trace
app/controllers/groups_controller.rb:118:in `remove_user'
Request

Parameters:

{"x"=>"3",
 "y"=>"9",
 "authenticity_token"=>"0BDDZDMR9ILzfnQkzoKwZD4u7tjC+oPHb9Ijpln+P9w=",
 "_method"=>"put",
 "utf8"=>"✓",
 "user"=>{"group_id"=>"",
 "user_id"=>"6"}}

person illogikal    schedule 26.03.2011    source источник


Ответы (1)


Поскольку вы используете form_for, все значения, отправленные через ваш файл f. методы окажутся в params[:user], а не в params. Вы можете оставить представление как есть и получить значение из params[:user][:user_id] или использовать помощник hidden_field_tag вместо f.hidden_field.

person Steve Jorgensen    schedule 26.03.2011