gpt4 book ai didi

ruby-on-rails - 使用带有嵌套路由的 'reform' gem

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:23 25 4
gpt4 key购买 nike

我想使用'reform' gem 来创建具有嵌套属性的对象。我有模型:

class Dish < ActiveRecord::Base
belongs_to :lunch_set
end

class Side < ActiveRecord::Base
belongs_to :lunch_set
end

class LunchSet < ActiveRecord::Base
belongs_to :restaurant
belongs_to :day
has_one :dish
has_many :sides
end

lunchset Controller "new"方法:

def new
@lunch_set = @restaurant.lunch_sets.build
@form = LunchSetForm.new(dish: Dish.new, side: Side.new)

respond_to do |format|
format.html # new.html.erb
format.json { render json: @lunch_set }
end
end

路线文件:

  namespace :admin do
resources :restaurants do
resources :lunch_sets
resources :days do
resources :lunch_sets
end
end
end

和 LunchSetForm

class LunchSetForm < Reform:Form
include DSL
include Reform::Form::ActiveRecord

property :name, on: :dish
property :name, on: :side
end

我的问题是如何构造 views/admin/lunch_sets/_form.html ,尤其是考虑那些路由?当我尝试

= simple_form_for @form do |f|
= f.input :name
= f.input :name

.actions
= f.submit "Save"

但它给我错误

undefined method `first' for nil:NilClass

并点成线

= simple_form_for @form do |f|

最佳答案

form_for(以及 simple_form_for)期望表单对象具有像 model_name 这样的 ActiveModel 方法来确定如何命名您的表单及其输入并解析表单的操作 url。通过包含 Reform::Form::ActiveRecord,您已接近正确处理,但您还需要做几件事:

require 'reform/rails'

class LunchSetForm < Reform:Form
include DSL
include Reform::Form::ActiveRecord

property :name, on: :dish
property :name, on: :side

model :dish
end

model :dish 行告诉 Reform 您希望表单的“主模型”成为 Dish 实例。这意味着它将使您的表单响应 ActiveModel 通常为普通 Rails 模型提供的方法,使用“主模型”为这些方法提供值。您的表单输入名称将类似于 dish[name] 等,并将发布到您的 dishes_url。您可以将您的 model 设置为您喜欢的任何内容,但是您选择的任何实例都需要传递到表单构造函数中。

关于ruby-on-rails - 使用带有嵌套路由的 'reform' gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com