尝试使用相同视图进行更新和创建流时出现路由错误(Rails 3)

时间:2011-01-13 13:32:22

标签: ruby-on-rails paperclip

我的整体用例:

我的列表模型有很多图片。列表详细信息页面列出了可以内联更新的所有字段(通过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。我怎么能传入身份证?通过重定向?解决这个问题的最佳方法是什么?谢谢。

3 个答案:

答案 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;