我在索引视图中有这个链接。
<%= link_to "Accept!", playtime_accept_path(playtime) unless playtime.accepted? %>
此链接的目的是更新已存在的Playtime记录,创建时:接受属性默认为false,用户单击此链接进行更改。
控制器动作非常简单(尽管如果有更简单的方法可以做到这一点,我很想知道)
def accept
@playtime = Playtime.find(params[:playtime_id])
@playtime.accepted = true
respond_to do |format|
if @playtime.update_attributes(params[:playtime])
format.html { redirect_to @playtime, notice: 'Playtime was successfully accepted.' }
else
format.html { render action: "edit" }
end
end
end
最后,我正在使用这条路线让所有魔法发生
resources :playtimes do
get 'accept' => "playtimes#accept", :as => :accept
end
这不应该是PUT请求吗?如果是这样,那么实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
更新您的路线,告诉Rails只能通过投放请求访问该操作
resources :playtimes do
put :accept, on: :member
end
然后将链接更新为
<%= link_to "Accept!", accept_playtime_path(playtime), method: :put unless playtime.accepted? %>
<强>更新强>
我忘了提及而不是params[:playtime_id]
,而是需要使用params[:id]
@playtime = Playtime.find(params[:id])