【问题标题】:Rails routing issue during POSTPOST期间的Rails路由问题
【发布时间】:2012-08-29 08:30:11
【问题描述】:

我是 Rails 新手,卡在奇怪的路口。问题与路线有关。 下面是我的代码

路线$

resources :users do
 resources :requests 
end

user.rb

class User < ActiveRecord::Base
 attr_accessor :password
 attr_accessible :email, :firstname, :lastname, :state, :city, :password
 has_many :requests ,:foreign_key => :user_id,:autosave => :true

request.rb

class Request < ActiveRecord::Base
attr_accessible :email, :status, :user_id,:token
belongs_to :user

请求表单 html

 <%= form_for (user_requests_path) do |f| %>
<div class="field">

<%= f.label "Email" %><br />
<div class="fieldgroup">

<%= f.text_field :email  , :class=>"textfield"%>

</div>
<div id="spacer">

</div>
<div class="fieldgroup">
<%= f.submit "Invite", :class=>"custombutton" %>
  </div>
   <% end %>
</div>

当我点击请求表单下的邀请按钮时 我遇到了以下错误,而不是调用 request#create。

路由错误

No route matches [POST] "/users/9/requests/new"

请求控制器

def create
@user = User.find(params[:user_id])
@request = @user.requests.create(params[:request])
redirect_to user_path(@user)
 end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.1 routes


    【解决方案1】:

    为此,您应该在您的routes.rb 中设置Nested resources

    另见:Routing nested resources in Rails 3

    【讨论】:

    • resources :users do resources :requests end 我这样做了
    【解决方案2】:

    您需要传递用户对象,因此跟踪您引用的用户实例:

    <%= form_for (user_requests_path(@user)) do |f| %>
    

    还有:

    has_many :requests ,:foreign_key => :user_id,:autosave => :true
    

    不需要传:foreign_key =&gt; :user_id,即默认外键,即“model_id”

    【讨论】:

      【解决方案3】:

      对于嵌套资源,您需要将两个参数都传递给一些助手,例如,

      user_request_path(@user, @request)
      

      等等。 Rails 资源指南很有帮助。

      【讨论】:

        猜你喜欢
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 2012-01-01
        相关资源
        最近更新 更多