簡體   English   中英

Rails:form_for通過自定義操作設置嵌套路線

[英]Rails: form_for setting Nested Routes with custom action

我對使用自定義操作的嵌套路由有問題。 我想制作一個表格網址路徑: localhost:3000/requests/2/images/create_for_request ImagesController調用自定義操作: create_for_request ,並使用來自requests/show.html.erbrequest_id 下面是錯誤:

No route matches {:action=>"create_for_request", :controller=>"requests", :id=>"11"}

request.rb:

class Request < ApplicationRecord
  belongs_to :user
  alias_attribute :requester, :user
  has_many :requests_has_images
  has_many :response_images, through: :requests_has_images, class_name: 'Image', source: 'image'
  has_many :chosen_images, lambda {where(chosen: true)}, through: :requests_has_images, class_name: 'Image', source: 'image'

  def is_requester(user)
    if user && self.user_id == user.id
      return true
    else
      return false
    end
  end  
end

config.rb

  resources :requests do
    post 'images/create_for_request' => 'images#create_for_request'
    put 'images/edit_for_request' => 'images#edit_for_request'
    post 'images/delete_for_request' => 'images#delete_for_request'
  end

requests / show.html.erb:

<h2>Make Response Image</h2>
# Send this form for image to image controller with request_id of this request
<%= form_for [@request, @request.response_images.build], url: url_for(action: 'create_for_request') do |f|  %>
<p>

images_controller.rb:

  def create_for_request    
    @request = Request.find(params[:request_id])    
    if @request          
      @image = Image.new(image_params)
      add_file_params(@image)
      @image.request = @request
      if @image.save       
        redirect_to request_path(@request)
      end     
    else
     #TODO show error no such request 
    end
  end  

任何幫助,將不勝感激

您已經在表單中提到了@request.images.build ,但我沒有看到您有任何與Request has_many :images關聯,而是有一些其他涉及image的關聯。 我沒有在其中確切地建立哪個關聯,所以我只能建議將該build更改為您想要的實際關聯,並且您可能還需要基於此稍微調整一下create_for_request

編輯:OP在發布的問題中更改了@request.images.build行以解決此問題。 解決此答案的注釋部分中提到的新問題的方法是更改​​表單聲明中的controller 因為您引用a actionRequest控制器中不存在a action

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM