Ruby on rails 尝试使用相同视图进行更新和创建流时出现路由错误(Rails 3)
我的总体用例: 我有一个列表模型,它有许多图像。列表详细信息页面列出了可以内联(通过ajax)更新的所有字段 我希望能够对更新列表和创建新列表使用相同的视图 我的列表控制器如下所示:Ruby on rails 尝试使用相同视图进行更新和创建流时出现路由错误(Rails 3),ruby-on-rails,paperclip,Ruby On Rails,Paperclip,我的总体用例: 我有一个列表模型,它有许多图像。列表详细信息页面列出了可以内联(通过ajax)更新的所有字段 我希望能够对更新列表和创建新列表使用相同的视图 我的列表控制器如下所示: def detail @listing = Listing.find(params[:id]) @image = Image.new #should this link somewhere else? respond_to do |format| form
def detail
@listing = Listing.find(params[:id])
@image = Image.new #should this link somewhere else?
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @listing }
end
end
def create
# create a new listing and save it immediately. Assign it to guest, with a status of "draft"
@listing = Listing.new(:price_id => 1) # Default price id
# save it to db
# TODO add validation that it has to have a price ID, on record creation. So the view doesn't break.
@listing.save
@image = Image.new
# redirect_to "/listings/detail/@listing.id" #this didn't work
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @listing }
end
end
问题
我使用的是一个局部视图,它为创建视图和局部视图显示了相同的表单 除了一件事外,这一切都非常有效: 当我停车时
,它工作得很好 当我停车时
,我得到以下错误: 显示/Applications/MAMP/htdocs/rails_testing/feedbackd/app/views/listings/_edit_form.html.erb,其中第100行出现: 没有路由匹配{:action=>“show”,:controller=>“images”} 提取的源(第100行附近):
97:
98:
99:
100:image|u path,:html=>{:multipart=>true}do | f |%>
101:
102:
103:
我认为问题在于:
当我上传一个新图像(我使用的是回形针)时,它需要列表id来创建图像记录。由于列表id未随listings/new一起传入,因此无法找到列表id。如何传入id?通过重定向?解决这个问题的最好办法是什么?谢谢。问题似乎是您试图提交到一个不存在的URL。如果您使用这样的表单: <%= form_for @image, :html => { :multipart => true } do |f| %> {:multipart=>true}do | f |%> 然后在routes.rb文件中,您应该有: resources :images 资源:图像
您应该有一个定义了创建操作的ImagesController。提交此表单时,将调用ImagesController#创建操作。问题在ur routes.rb文件中。你没有定义路径,这就是为什么它会给出这个错误。这可能对你有帮助
谢谢你,你的评论都很有帮助 我就是这样解决的: 我为images/new添加了一条路径,指向imageController->Create
<%= form_for @image, :url => "/images/new/#{@listing.id}" , :html => { :multipart => true } do |f| %>
<%= f.text_field :description %><br />
<%= f.file_field :photo %>
<%= submit_tag "Upload" %>
“/images/new/#{@listing.id}”,html=>{:multipart=>true}do | f |%>
你确定你的routes.rb文件正确吗?你是建议我修复我的路由,还是要提交到的URL的核心内容?:URL=>图像路径在表单中没有用处declaration@apneadiving如果已经有图像,那么图像路径有用吗?我已经有了这样定义的资源。当我删除:url=>“…”时,它对我来说非常有用,但对我来说失败了。为了解决这个问题,我在下面的答案中硬编码了它+如果路由定义为“resources:images”,则不必指定URL,因为RAILS可以确定新的图像类应该发布到正确的URL。也就是说,如果要指定路由,应该使用“images\u path”而不是“images\u path”,因为您要发布到/images。虽然您的注释有意义,但路径已定义+1.
<%= form_for @image, :url => "/images/new/#{@listing.id}" , :html => { :multipart => true } do |f| %>
<%= f.text_field :description %><br />
<%= f.file_field :photo %>
<%= submit_tag "Upload" %>