Използвам Devise и CanCan за управление на потребители и потребителски права. Това, което искам е: обикновените потребители ще могат да актуализират собствените си публикации. Най-важният модел се нарича активност.
В модела на способности, който имам за обикновени членове:
elsif user.role? :Member
can :read, :all
can :create, :all
can :manage, Activity, :user_id=>user.id
(Благодаря на Yuriy Goldshtrakh за синтаксиса на третия ред)
В индексния изглед на дейностите имам:
<% if can? :update, activity %>
<br />
<%= link_to 'Update', edit_activity_path(activity) %>
<% end %>
<% if can? :delete, activity %>
<%= link_to 'Delete', activity, :confirm => 'Really?', :method => :delete %>
<% end %>
Това работи: показва само актуализацията и връзката за изтриване, ако активността е създадена от текущия член.
Ако обаче членът актуализира дейността, промените не се запазват и членът не се връща обратно към дейността - както трябва да бъде след успешно актуализиране.
Ето действието за актуализиране в контролера за дейности:
# PUT /activities/1.xml
деф актуализация
authorize! :update, @activity
@activity = Activity.find(params[:id])
respond_to do |format|
if @activity.update_attributes(params[:activity])
format.html { redirect_to(@activity, :notice => 'Activity was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @activity.errors, :status => :unprocessable_entity }
end
end
край
Въпросът е: Защо дейността не се актуализира правилно? Благодарен съм за всички идеи!