我的整体用例:
我的列表模型有很多图片。列表详细信息页面列出了可以内联更新的所有字段(通过ajax)。
我希望能够对更新列表和创建新商家信息使用相同的视图。
我的列表控制器如下所示:
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
问题
我正在使用部分显示创建视图和详细视图的相同表单。
除了一件事之外,这完全有效: 当我拉起来 http://0.0.0.0:3000/listings/detail/7,它完美无缺。
当我拉起来 http://0.0.0.0:3000/listings/new,我收到以下错误:
显示/Applications/MAMP/htdocs/rails_testing/feedbackd/app/views/listings/_edit_form.html.erb,其中第100行被提出:
没有路线匹配{:action =>“show”,:controller =>“images”} 提取的来源(第100行):
97: <!-- Form for new images -->
98: <div class="span-20 append-bottom">
99: <!-- <%# form_for :image, @image, :url => image_path, :html => { :multipart => true } do |f| %> -->
100: <%= form_for @image, :url => image_path, :html => { :multipart => true } do |f| %>
101: <%= f.text_field :description %><br />
102: <%= f.file_field :photo %>
103: <%= submit_tag "Upload" %>
我认为问题是: 当我上传新图像(我正在使用Paperclip)时,它需要listing_id来创建图像记录。由于list_id未通过 listing / new 传递,因此无法找到listing_id。我怎么能传入身份证?通过重定向?解决这个问题的最佳方法是什么?谢谢。
答案 0 :(得分:1)
问题似乎是您尝试提交到不存在的网址。如果你使用这样的表格:
<%= form_for @image, :html => { :multipart => true } do |f| %>
然后在您的routes.rb文件中,您应该:
resources :images
你应该有一个定义了创建动作的ImagesController。提交此表单时,将调用ImagesController #create操作。
答案 1 :(得分:1)
问题出在你的routes.rb文件中。你没有定义路径,这就是它给出这个错误的原因。这可能有助于你
http://guides.rubyonrails.org/v2.3.8/routing.html#restful-routing-the-rails-default
答案 2 :(得分:0)
谢谢你,你的评论都很有帮助。
这就是我解决问题的方法:
我为 images / new 添加了一条路线,指向 imageController - &gt;创建强>
<%= 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" %>
&lt;%end%&gt;