插入的命名路由。 代替 /
我在rails 4中的命名路由遇到了问题( 非资源嵌套的命名路由 )。
我已经转移到其他东西,但仍然在努力解决非资源url的命名路由问题。
这是我从rake routes
:
GET /messages/:id/report/:reply_token(.:format) messages#report messages POST /messages(.:format) messages#create
和我的routes.rb
resources :messages, only: [:create] do member do get 'report/:reply_token', :action => 'report'#, :as => :message end end
由于我在顶部链接的post中遇到的问题,我正在尝试通过执行以下操作获取/ messages /:id / report /:reply_token路由的URL:
"#{messages_url(@message, :host => "localhost:3000")}/report/#{@message.reply_token}"
但它给了我这个:
http://localhost:3000/messages.110/report/6bBw22TdaRYcQ3iVzW1ZwA
为什么会有。 在’messages’和’110’(message_id)之间?
我还在messages_url()
尝试了@ message.id,而不是@message。 我也尝试了这个: report_message_path(message_id: @message.id, reply_token: @message.reply_token)
但是得到了与上面链接的问题相同的错误。 我也尝试过message_url()
但它给出了undefined method 'message_url'
。
你正在混淆路线。 messages_url
用于生成create
操作的URL,该URL在其路由中没有ID。 Rails假设110
是格式并使用第二条路径(命名为messages
)
messages POST /messages(.:format)
作为解决方案,请像这样命名您的路线,并添加show动作
resources :messages, only: [:create,:show] do member do get 'report/:reply_token', :action => 'report' , :as => :custom_message end end
和,
custom_message_url(@message, :host => "localhost:3000")
有关在此处命名路线的更多信息
这里已经回答了–Rails _path helper生成格式不是id的路径