为什么我的路线坚持要GET,当它应该是PUT时

时间:2014-07-27 18:28:42

标签: ruby-on-rails ruby ruby-on-rails-3

我在索引视图中有这个链接。

<%= 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请求吗?如果是这样,那么实现这一目标的最佳方法是什么?

1 个答案:

答案 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])