enter code here
我是rails的新手,我遇到了这样的问题。这是一个错误
No route matches {:action=>"open", :controller=>"messages", :conversation_id=>"6", :id=>nil} missing required keys: [:id]
这是控制器动作
before_action :set_conversation, except:[:open]
before_action :set_message, only:[:open]
def open
@message.open!
respond_with @message
end
def set_conversation
@conversation = Conversation.includes(:messages).find(params[:conversation_id])
end
def message_params
params.require(:message).permit(:body)
end
和视图
-elsif !message.opened?
.nontouch id="mess_#{message.id}"
=link_to 'Open', open_message_path(id: message.id), method: :patch, remote: true, class:'btn btn-success'
这是路线
resources :conversations do
resources :messages, shallow: true do
patch :open, on: :member
end
end
我需要一些帮助。我哪里错了?如果需要任何其他信息,请告诉我
rake routes | grep open
open_message PATCH /messages/:id/open(.:format) messages#open
从路由和编辑链接中删除浅层
=link_to 'Open', open_conversation_message_path(message.conversation.id, message.id), method: :patch, remote: true, class:'btn btn-success'
给出
No route matches {:action=>"open", :controller=>"messages", :conversation_id=>"6", :id=>nil} missing required keys: [:id]
答案 0 :(得分:0)
我尝试建立下一条路线
resources :conversations do
resources :messages do
patch :open, on: :member
end
end
这回报我:
$ rake routes | grep open
open_conversation_message PATCH /conversations/:conversation_id/messages/:id/open(.:format) messages#open
这意味着您尝试使用来自特定cinversation的特定消息
目前你必须建立你的路径,如open_conversation_message_path(@conversation, @message)
(使用方法PATCH)
答案 1 :(得分:0)
使用 button_to 代替链接。
生成一个包含单个按钮的表单,该按钮提交到由该组选项创建的URL。这是确保搜索机器人或加速器不会触发导致数据更改的链接的最安全方法。
http://apidock.com/rails/ActionView/Helpers/UrlHelper/button_to
在您看来:
<%= button_to "Open", { action: 'open', id: message.id }, method: :patch, remote: true, class: 'btn btn-success' %>
使用这种方法,您可以保留您最初的routes.rb文件:
resources :conversations do
resources :messages, shallow: true do
patch :open, on: :member
end
end
答案 2 :(得分:0)
所以这里有效= button_to "Open", { action: 'open', id: "#{message.id}" }, method: :patch, remote: true, class: 'btn btn-success'
需要插入#{message.id}