已更新
Started GET "/classifieds/12/questions/new" for 127.0.0.1 at 2014-07-18 10:55:27 -0400
Processing by QuestionsController#new as HTML
Parameters: {"classified_id"=>"12"}
Classified Load (0.5ms) SELECT "classifieds".* FROM "classifieds" WHERE "classifieds"."id" = $1 LIMIT 1 [["id", "12"]]
Rendered questions/new.html.erb within layouts/application (2.5ms)
Completed 500 Internal Server Error in 35ms
TypeError - can't convert Symbol into Integer:我有一个belongs_to :classified的问题模型和一个has_many :questions的分类模型。
因此,我在routes.rb中执行嵌套路由
resources :classifieds do
resources :questions
end正因为如此,当我做耙路的时候,我会得到这些新的路线。
classified_questions GET /classifieds/:classified_id/questions(.:format) questions#index
POST /classifieds/:classified_id/questions(.:format) questions#create
new_classified_question GET /classifieds/:classified_id/questions/new(.:format) questions#new
edit_classified_question GET /classifieds/:classified_id/questions/:id/edit(.:format) questions#edit
classified_question GET /classifieds/:classified_id/questions/:id(.:format) questions#show
PUT /classifieds/:classified_id/questions/:id(.:format) questions#update
DELETE /classifieds/:classified_id/questions/:id(.:format) questions#destroy我正在浏览指南中的嵌套资源部分。新问题应该给我一个表单,我可以在那里张贴到questions#create,这允许我张贴问题到数据库,属于一个特定的分类广告。
在模式中的问题表中,我添加了这个挂钩。
t.integer "classifieds_id"*我没有分类控制器。
这是我的控制器,它正在呈现显示方法。
class UplatzPlacesController < ApplicationController
require 'balanced'
helper_method :countries
def show
@classified=Classified.find(params[:id])
end
endshow.html.erb向用户显示分类广告,在底部有一个link_to
<%= link_to "Post a question", new_classified_question_path(@classified.id) %>我生成了自己的问题控制器
class QuestionsController < ApplicationController
def index
end
def new
@classified = Classified.find(params[:classified_id])
@question = Question.new
end
def create
@classified = Classified.find(params[:classified_id])
@question = Question.new(params[:question])
@classified.questions << @question
if @question.save
flash[:notice] = "Question has been posted"
else
flash[:notice] = "It did not go through"
end
end
end当我单击link_to时,我确实看到了表单,并且url变成如下
classifieds/12/questions/new #shows that id got passed correctly但是,当我单击submit时,我将得到这个路由错误。
Routing Error
No route matches [POST] "/classifieds/12/questions/new"*每条路线都有邮政。
这是我的观点/问题中的new.html.erb
<%=form_for @question, :url => new_classified_question_path do |f| %>
<fieldset>
<ul id='posting_question_form'>
<li>
<%=f.label :question_body, 'Post Your Question To Seller:'%>
<%= f.text_area :question_body, :cols=>40, :rows=>50 %>
</li>
</ul>
</fieldset>
<div>
<%= f.submit "Post Question", :class => 'goButton', :style => 'width:auto;float:right;' %>
</div>
<% end %>
</div>我在问题模型中设置了大量赋值的属性。
attr_accessible :question_body, :classifieds_id它应该能用,但它不管用。
另外,应用程序是gem 'rails', '3.2.13'
发布于 2014-07-18 14:47:17
您正在使用错误的URL帮助程序:
new_classified_question_path此助手将导致嵌套在new中的控制器questions的classified操作。( Rails中的URL的结构如下:<action>_<parent_controller>_<controller_name>_path或以_url而不是_path结尾)。
你应该使用:
form_for @question, classified_questions_path(@classified) do |f|给你的指南:helpers.html
发布于 2014-07-18 15:29:00
在你的新控制器上,应该提出一个新的问题
# GET /classifieds/:classified_id/questions/new
def new
# 1st you retrieve the classified to params[:classified_id]
@classified = Classified.find(params[:classified_id])
# 2nd you build a new one of question
@question = @classified.questions.build
end
# POST /classifieds/:classified_id/questions
def create
# 1st you retrieve the classified to params[:classified_id]
@classified = Classified.find(params[:classified_id])
#2nd you create the question with arguments in params[:question]
@question = @classified.questions.create(params[:question])
respond_to do |format|
if @question.save
# redirection to the Question resource
format.html { redirect_to([@question.classified, @question], :notice => 'Question has been posted.')
# or redirection to the list of Questions
# redirect_to(classified_@questions_url)
else
format.html {
flash[:error] = "It did not go through"
render :action => "new"
}
end
end
end以及新的形式
<%= form_for([@question.classified, @question]) do |f| %>
....
<% end %>另一种创建嵌套资源的方法:在rails 3中创建嵌套资源,并更新脚手架链接和重定向
https://stackoverflow.com/questions/24827655
复制相似问题