轨道4条浅航线资源表单提交不工作(Rails 4 shallow routes resource f

2019-10-30 01:22发布

我有一个像下面浅嵌套的资源路线:

    resources :venues, shallow: true do
        #Halls
        get "hall/:id/exhibition" => "halls#exhibition", as: :exhibition
        get "hall/:id/visit" => "halls#visit", as: :hall_visit
        get "structure", :to => "venues#venue_structure"
        resources :asset_types, :booths_tags, :tags, :uploaded_files, :events, :chats
        resources :halls do
            resources :webcasts
            resources :booths do
                resources :chats
            end
        end
    end

下面是当前正在使用的simple_form。

= simple_form_for(hall_booths_path(@booth), :html => { :class => "form-horizontal" }, :wrapper => "horizontal", defaults: { :input_html => { class: "form-control"}, label_html: { class: "col-lg-4" } } ) do |f|
  = f.simple_fields_for @booth do |b|

的问题是, hall_booths_path(@booth)部分被生成/halls/1/booths/new的代替/halls/1/booths

有什么错在这里,需要修复?

我的booths路线:

hall_booths_path     GET     /halls/:hall_id/booths(.:format)    booths#index
                     POST    /halls/:hall_id/booths(.:format)    booths#create
new_hall_booth_path  GET     /halls/:hall_id/booths/new(.:format)    booths#new
edit_booth_path      GET     /booths/:id/edit(.:format)  booths#edit
booth_path           GET     /booths/:id(.:format)   booths#show
                     PATCH   /booths/:id(.:format)   booths#update
                     PUT     /booths/:id(.:format)   booths#update
                     DELETE  /booths/:id(.:format)   booths#destroy

Answer 1:

通过在选项哈希的路径,而不是作为第一个参数:

<%= simple_form_for :booth, :url => hall_booths_path(@hall) do |f| %>
    ...
<% end %>

需要注意的是参数hall_booths_pathHall ,而不是一个Booth 。 当你创建一个孩子,你需要提供父。

另一种选择是无法通过URL,但模型对象。 假设@hall是现有的Hall@booth是一个新的Booth

<%= simple_form_for [@hall, @booth] do %>
    ...
<% end %>

我发现这种方法要简单得多。



文章来源: Rails 4 shallow routes resource form submission not working