【问题标题】:How do I accept nested models that are :through has_many with Devise in Rails 3我如何接受嵌套模型:通过has_many和Rails 3中的Devise
【发布时间】:2025-12-25 13:35:07
【问题描述】:

我有以下结构,我正在尝试在注册设计用户时创建至少 1 个地址(具有有效验证)。用户在没有验证地址的情况下被很好地保存,尽管它是有效的,但它被丢弃了。我已经测试并确认我可以访问 :addresses 并通过控制台通过user.addresses << Address.new(...) 添加它们,但不能通过表单。我不确定这里发生了什么。

有什么想法吗?任何/所有帮助将不胜感激 - 谢谢!

models/user.rb

class User < ActiveRecord::Base
  has_many :user_addresses
  has_many :addresses, :through => :user_addresses
  ...
  attr_accessible ..., :addresses
  accepts_nested_attributes_for :addresses
end

models/user_addresses.rb

class UserAddress < ActiveRecord::Base
  belongs_to :address
  belongs_to :user
end

views/registration/new.html.haml

- resource.addresses.build if resource.addresses.empty?
= semantic_form_for resource, :as=> resource_name, :url => registration_path(resource_name) do |f|
  = devise_error_messages!
  ...
  = f.inputs :name => "Addresses", :id=> "addresses" do
    = f.semantic_fields_for :addresses do |a|
      ...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise formtastic


    【解决方案1】:

    我会尝试两件事:

    1. 检查您的日志,看看是否有关于无法批量分配属性的警告。
    2. 将 :addresses_attributes 添加到您的 attr_accessible

    【讨论】:

    • 啊哈,谢谢伙计!我不敢相信我在日志中错过了,呃。