Ruby on rails Rails中的命名空间表单对象

Ruby on rails Rails中的命名空间表单对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我正在构建的新Rails 6项目中,我很难设置一些自定义表单对象。我怀疑这可能是由于名称空间问题,但我还不能确定 app/views/saasy/signups/new.html.erb 机构名称: app/controllers/saasy/signups\u controller.rb class Saasy::SignupController“BhhvRaYKf220afExocQ//LIY1jszVsXs+LTHFUEFKVR6CIVBSA+22MSXWO3YT6MK2UOSKX9

在我正在构建的新Rails 6项目中,我很难设置一些自定义表单对象。我怀疑这可能是由于名称空间问题,但我还不能确定

app/views/saasy/signups/new.html.erb


机构名称:
app/controllers/saasy/signups\u controller.rb

class Saasy::SignupController
config/routes.rb

Rails.application.routes.draw do
名称空间:saasydo
资源:注册,仅:[:新建,:创建]
结束
结束
app/forms/saasy/signup\u form.rb

模块Saasy
班级登记表
包括ActiveModel::Model
属性访问器:用户,:帐户
委托:attributes=,to::user,前缀:true
委托:属性=,收件人::帐户,前缀:true
def初始化(参数={})
超级(参数)
@user=Saasy::user.new(参数)
@account=Saasy::account.new(参数)
结束
def寄存器
#最终在这里做实际的注册工作
结束
结束
结束
但是,每当我测试它时,我都会返回以下消息:param丢失或值为空:signup\u form

params散列如下所示:

{
“真实性令牌”=>“BhhvRaYKf220afExocQ//LIY1jszVsXs+LTHFUEFKVR6CIVBSA+22MSXWO3YT6MK2UOSKX9GL6WIAGMMVSG==”,
“帐户”=>{“组织”=>“示例名称”},
“提交”=>“创建注册表单”
}

我已经尝试了很多常见的混乱解决方案,比如在视图中使用
表单,更改路线名称等等,但到目前为止我还没有任何运气。任何建议都将不胜感激

这与名称空间无关。您只是需要错误的参数密钥

def signup_form_params
  params
    .require(:signup_form)
    .permit(account_attributes: [:organization])
end
Rails通过调用传递的模型上的
model\u name.param\u key
来获取输入的“key”。param键不考虑类的模块嵌套。也不应该这样,因为这是一个实现细节,不一定是应用程序通过HTTP公开的“公共api”的一部分。您的代码组织和应用程序的routes/http参数是两件截然不同的事情

您可以通过提供
作用域:
选项来覆盖该键,以
使用
创建表单

<%= form_with(model: [ :saasy, @signup ], scope: :saasy_signup_form, local: true) do |signup_form| %>

  <%= fields_for :account, @signup.account do |account_fields| %>
    Organization name: <%= account_fields.text_field :organization %>
  <% end %>

  <%= signup_form.submit %>
<% end %>

机构名称:

但我觉得这很愚蠢。

这与名称空间无关。您只是需要错误的参数密钥

def signup_form_params
  params
    .require(:signup_form)
    .permit(account_attributes: [:organization])
end
Rails通过调用传递的模型上的
model\u name.param\u key
来获取输入的“key”。param键不考虑类的模块嵌套。也不应该这样,因为这是一个实现细节,不一定是应用程序通过HTTP公开的“公共api”的一部分。您的代码组织和应用程序的routes/http参数是两件截然不同的事情

您可以通过提供
作用域:
选项来覆盖该键,以
使用
创建表单

<%= form_with(model: [ :saasy, @signup ], scope: :saasy_signup_form, local: true) do |signup_form| %>

  <%= fields_for :account, @signup.account do |account_fields| %>
    Organization name: <%= account_fields.text_field :organization %>
  <% end %>

  <%= signup_form.submit %>
<% end %>

机构名称:
但我觉得这很傻