为什么我的 Rails Form Helper 没有使用正确的子哈希?

Why is my Rails Form Helper not using the correct sub-hash?

提问人:Thijs Zijlstra 提问时间:9/14/2023 更新时间:9/15/2023 访问量:33

问:

我有一个表单来创建BookingAccommodation模型的实例。此模型属于住宿,并具有internal_name。

<%= form_with model: @booking_accommodation, url: property_settings_accommodations_type_booking_accommodations_path(@accommodation) do |f| %>
    <div class="flex flex-col">
        <%= f.label :internal_name %>
        <%= f.text_field :internal_name, class: "border" %>
    </div>
    
    <div>
        <%= f.submit %>
    </div>
<% end %>
class Property::Settings::Accommodations::BookingAccommodationsController < PropertyController
    def create
        @accommodation = Accommodation.find(params[:type_id])
        @booking_accommodation = @accommodation.booking_accommodations.new(booking_accommodation_params)

        if @booking_accommodation.save
            redirect_to edit_property_settings_accommodations_type_path(@accommodation)
        else
            # Handle error
        end
    end
    
    private

    def booking_accommodation_params
        params.require(:booking_accommodation).permit(:internal_name)
    end
end

text_field生成的html如下:

<input class="border" type="text" name="internal_name" id="internal_name">

但这需要有一个booking_accommodation子哈希,如下所示:

<input class="border" type="text" name="booking_accommodation[internal_name]" id="internal_name">

如果我没有子哈希,则参数不会嵌套,并且表单会导致错误。是什么原因造成的?

Ruby-on-Rails 红宝石 表格

评论

0赞 max 9/14/2023
最可能的原因就是没有。通过添加断点进行检查。@booking_accommodation

答:

-1赞 smathy 9/15/2023 #1

您显示该方法的事实强烈表明您不了解它是最初呈现表单的方法,因此您需要在何处设置 ivar。createnew

评论

0赞 max 9/15/2023
我非常怀疑在这种情况下没有单独的新路由,并且表单“嵌入”在父资源的显示视图中。
1赞 smathy 9/15/2023
可能是,仍然是错误的地方来设置这些 ivars :)
1赞 Thijs Zijlstra 9/15/2023
在这种情况下,确实没有单独的新路线,并且表单嵌入在住宿的编辑视图中。但你的评论确实为我指明了正确的方向。在父资源的视图中添加缺失的内容确实解决了我的问题。感谢您的帮助。@booking_accommodation = BookingAccommodation.new
0赞 smathy 9/16/2023
很高兴听到,干得好。