我一直在试图解决这个问题几个小时,我已经审查了所有关于SO的类似问题,但似乎没有任何效果。
我有以下表格
注册/ new.html.erb
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.fields_for :user_roles do |builder| %>
<%= builder.hidden_field :role_id, :value => @role.id %>
<% end %>
我已经覆盖了注册控制器,如此
class Users::RegistrationsController < Devise::RegistrationsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
layout "public"
def new
@user = User.new
@user.user_roles.build()
@role = Role.find_by_name("organiser")
super
end
视图不呈现隐藏的表单,如果我删除f变量,则会呈现user_roles的字段。
我正在新操作中构建user_roles的占位符实例,但这似乎没有任何区别。我已设置accepts_nested_attributes_for :user_roles
。
无论如何,这让我分心,任何帮助都会非常感激。
答案 0 :(得分:0)
我已经解决了这个问题,但我不确定为什么会这样。 (用**包围的变化)
在我的视图中
<%= f.fields_for **:user_roles, @user_roles** do |builder| %>
<%= builder.hidden_field :role_id, :value => @role.id %>
<% end %>
在我的设计注册控制器的新动作中,我有
def new
@user = User.new
**@user_roles = [@user.user_roles.build ]**
@role = Role.find_by_name("organiser")
super
end
我的用例如下,我希望在网站上注册的人员处于组织者角色,然后他们可以在供应商或成员角色中将其他用户添加到系统中。为了处理在应用程序内创建用户,我有一个用户控制器,允许组织者将用户添加到特定角色。
users_controller的新操作中的代码是:
def new
@user = @wedding.users.new
@roles = @wedding.roles
1.times{ @user.user_roles.build() }
end
users / new.html.haml中的嵌套表单是:
= f.fields_for :user_roles do |builder|
%p
= f.label :roles
= builder.select(:role_id, options_for_select(@roles.map {|role| [role.name, role.id]}))
问题是这个代码有效,当我试图在注册控制器中复制它时,它不起作用。我无法弄清楚为什么,任何建议都会受到赞赏。
希望这有用。