我是新来的rails,并且我有嵌套窗体和所有这些问题。 我有一个用户模型和一个组织模型。 当我想创建一个用户时,我想指定他来自哪个组织。 组织名称已经存在于数据库中,或者如果不存在,我想创建一个新记录并将该记录与用户模型相关联。rails自动完成如何使用exising记录
我很难理解rails框架中的所有关系(多对多等)影响,但到目前为止我已经得到了这个。
模型/ organization.rb
class Organization < ActiveRecord::Base
has_many :user
validates_presence_of :name
end
模型/ user.rb(短)
class User < ActiveRecord::Base
belongs_to :organization
accepts_nested_attributes_for :organization
#####
end
由此看来,在控制台中,我可以创建用户并指定和组织名称,它将为该用户创建一个新记录并为该组织创建一个新记录。 问题是,每次创建一个新组织。
我希望能够将已经存在的组织关联到新用户。 我可以通过typeahead.js这个表单获得组织的列表,所以当用户选择一个名称时,名称是相同的。但我不知道如何将两者联系起来(新创建的用户和现有的组织)。
我想将组织的id放在隐藏字段中,并检查控制器是否存在此id。如果确实如此,就把这个ID,如果它不创建一个新的。但我甚至不知道如何做到这一点。在控制台中,当我更新用户的属性,例如,与存在的的organization_ID = 3:
u.update_attributes(:organization_attributes => { id: 3 })
它拒绝说他没有找到ID用户= ...与组织。 id = 3 ... 我不明白。
我想,因为这是一个普遍的情况,这应该很容易,但它与我的头混乱。
如果有人愿意向我解释,我会非常感激。
谢谢。
编辑 我刚刚在我的控制器中尝试了一些东西,但这也不起作用。
def create
@user = User.new(user_params) # :user object built from user inputform
org = Organization.find_by(name:user_params[:organization_attributes][:name])
if org
@user.organization.id = org.id
end
if @user.save
# signin the user (token etc)
sign_in @user
flash[:success] = "Registration sucessfull !"
redirect_to @user
else
render 'new'
end
end
+ user_controller(强PARAMS)
def user_params
params.require(:user).permit(:lname,:email,:fname,:password,:password_confirmation,
:gender,:role,:display_private,:link_li,:country,:city,:phone,:hobbies,
:avatar,:org_name, :organization_attributes => [ :id, :name])
end
+ form.html。ERB
<%= u.fields_for :organization do |o| %>
<%= o.label "Organization" %>
<!-- PUT ORGA -->
<%= o.text_field :name, class:"form-control" %>
<% end %>
它应该是'的has_many:用户在组织 – 2014-09-19 14:35:17