[英]Rails: form_for setting Nested Routes with custom action
我對使用自定義操作的嵌套路由有問題。 我想制作一個表格網址路徑: localhost:3000/requests/2/images/create_for_request
。 在ImagesController
調用自定義操作: create_for_request
,並使用來自requests/show.html.erb
的request_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 action
是Request
控制器中不存在a action
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.