我正在构建一个用于存储体育游戏的应用程序,因为所有用户都将被放置在单独的联赛中。我为此设置了多对多但是当用户查看应用程序时,他只能看到来自它的current_league的所有信息。
现在我正在尝试与用户所在的所有联赛进行循环,用户应该能够点击联盟来改变它的活跃联赛。
路线
resources :users do
member do
post :change_current_league
end
end
UserController中
def change_current_league
@user = current_user
@user.update(:current_league_id, params[:league_id])
redirect_to :back, :notice => "Successfully changed your active league"
end
查看
<% current_user.leagues.each do |l| %>
<%= link_to change_current_league_user_path(current_user, l), method: :post, class: 'btn btn-default btn-sm' do %>
<%= l.id %><%= l.league_name %><br>
<% end %>
<% end %>
我该怎么做才能让它发挥作用?
对不起,如果它有点像菜鸟问题:P
编辑:
def change_current_league
@user = current_user
@user.update_attribute(:current_league_id, 1)
redirect_to :back, :notice => "Successfully changed your active league"
end
resources :users do
member do
patch :change_current_league
end
end
这是有效的,但如何将正确的league_id输入用户控制器?
EDIT2:
def change_current_league
@league = League.find(params[:league_id])
@user = current_user
@user.update_attribute(:current_league_id, @league)
redirect_to :back, :notice => "Successfully changed your active league"
end
答案 0 :(得分:1)
试试这个, 您正在更新用户属性,因此其put / patch请求不会发布请求。将league_id作为参数传递给您的链接,如此,
<%= link_to change_current_league_user_path(current_user, current_league_id: l.id), method: :patch, class: 'btn btn-default btn-sm' do %>
并在您的usercontroller中(检查编辑)替换为波纹管线
@user.update_attribute(current_league_id: params[:current_league_id])