【问题标题】:Routing in Rails formsRails 表单中的路由
【发布时间】:2017-09-13 04:31:07
【问题描述】:

我在嵌入式 Ruby 中成功使用了一个如下所示的表单:

<%= form_for :comment, url: user_comments_path do |c| %>
  <%= c.text_field :location %>
  <%= c.text_field :title %>
  <%= c.text_field :body %>
  <%= c.submit ("Submit") %>
<% end %>

但是,当我尝试将其放入 Bootstrap 时,我遇到了问题。然后我尝试制作一个更简单的 HTML 表单,如下所示:

<form accept-charset="UTF-8" action="user/comments" method="post">
  <input id="comment_location" name="comment[location]" type="text"/>
  <input id="comment_title" name="comment[title]" type="text"/>
  <input id="comment_body" name="comment[body]" type="text"/>
  <input name="commit" type="submit" value="Create"/>
</form>

...但我遇到了同样的错误消息:没有路由匹配 [POST]“/users/1/cmets/new/user/cmets”。我正在使用嵌套资源,终端中的 Rails 路由告诉我 user_cmets 路径“POST”等同于 user/user_id/cmets 和 Create controller 操作。

在我的 HTML 表单中,如果我输入 action="user/cmets",那么结果路径是 "/users/1/cmets/new/user/cmets",如果我输入 action="cmets",那么路径是 "/ cmets”,如果我输入“/”,则路径是“/”。我试图到达的路径是“user/cmets”,但似乎无法通过我的 HTML 表单。

我绞尽脑汁,但我不明白为什么会这样。任何帮助将非常感激!谢谢

ps。路线如下所示:

Rails.application.routes.draw do
  get 'sessions/new'

  get 'welcome/index' 

  root 'welcome#index'

  get 'user' => 'users#show'

  get 'login', to: 'sessions#new'
  post 'login', to: 'sessions#create'
  delete 'logout', to: 'sessions#destroy'

  get "log_out" => "sessions#destroy", :as => "log_out"
  get "log_in" => "sessions#new", :as => "log_in"
  get "sign_up" => "users#new", :as => "sign_up"
  root :to => "users#new"

  resources :users do
    resources :comments
  end 

  resources :sessions

end

【问题讨论】:

  • 你能上传你的路由文件吗

标签: ruby-on-rails forms routing


【解决方案1】:

更新routes.rb 使用collection 而不是resources 以获取/users/comments 类似路径

resources :users do
  collection do
    get 'comments'
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多