如何在设计模型中使用嵌套属性
我有与使用Devise创建其他相关模型 (没有答案)相同的问题。
我已经覆盖了创建新用户的设计视图并添加了公司名称,我已将模型更改为使用accepts_nested_attributes_for
没有错误,但它没有添加嵌套记录 ,我没有可以修改请求的控制器。
我有以下(缩短以使其可读):
的routes.rb
map.devise_for :users map.resources :users, :has_many => :companies
user.rb
has_many :companies accepts_nested_attributes_for :companies devise :registerable ... etc
company.rb
belongs_to :user
new.html.erb
... registration_path(resource_name) do |f| %> ... ...
更新:我没有添加:company到User模型中的attr_accessible列表。
您可能尝试批量分配一些受保护的变量,或者您可能没有保存有效的记录。 检查以确保记录实际保存到db。
您可以将以下方法添加到用户模型:
user.rb
def with_company self.companies.build self end
并修改视图:
new.html.erb
... <% form_for [resource_name, resource.with_company], :url => registration_path(resource_name) do |f| %> ... <% f.fields_for :company do |company_form| %> ... <% end %>
这样,您就可以使用嵌套表单向用户添加一个公司。 要向用户动态添加多个公司,请查看Ryan Bates的#197轨道广播 。 确保您将这对资源作为数组传递,在其他地方您将收到如下错误:“错误的参数数量(3为2)”。
我意识到这是一个非常老的线程,但是因为我找到了更好的解决方案,因此回复。
只需更改new.html.erb,如下所示,
<% form_for(resource, :as => resource_name,:url => registration_path(resource_name) do |f| %> ... <% prefix = "user[company_attributes]"%> <% fields_for prefix, @user.company do |company_form| %> ... <% end %> <% end %>
这样,当@ user.save被调用时,它也会运行company.save,并且您可以使用公司模型中的所有validation。
我没有很多RoR经验,但我认为这是一个更好的解决方案。 你怎么看?
- 无法安装RVM。 / usr / local / rvm中的权限被拒绝
- 在开发中使用sqlite3进行CarrierWave多文件上传的解决方法
- 使用google_oauth2获取“错误:redirect_uri_mismatch”
- Rails:Phusion Passenger和I18n.locale应该如何表现?
- 独角兽陷入困境:刷新gem列表
- 设计:将现有访客用户转换为注册用户
- 何时应该在Rails中使用`DateTime.now.utc`与`Time.current.utc`?
- 如何跟踪一个用户在线的时间? 使用Ruby on Rails
- Kaminari.paginate_array ArgumentError(错误的参数个数(2个为1)