我正在尝试创建一个新用户,但是用户has_one音乐家,而Musician属于用户。在创建这种关系之前,我的创建工作正常,但现在我收到了错误:
音乐家期待,得到String
但是我不知道为什么会发生这种情况,我想我的user_id就像这个主题一样Country expected, got String error,但我不确定,也不知道如何修复它,这是我的用户控制器
def create
@user = User.new(params[:user])
if params[:user].musician
@user.musico = Musician.New
else
@user.estudio = Studio.new
end
if @user.save
sign_in @user
flash[:success] = "Welcome!!"
redirect_to @user
else
render 'new'
end
end
这是提交
{"utf8"=>"✓",
"authenticity_token"=>"VjOUW75ocw8rw/rEqa076x9N/Oa/5AjMxBOmRGAaDAM=",
"user"=>{
"firstName"=>"Eduardo",
"lastName"=>"Almeida",
"email"=>"eduardo@teste.com.br",
"city"=>"Mogi",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"musician"=>"true"},
"commit"=>"Criar Conta"}
编辑:表格
<%= form_for(@user) do |f| %>
<%= render 'shared/erros' %>
<%= f.label :firstName, "Nome" %>
<%= f.text_field :firstName%><br/>
<%= f.label :lastName, "Sobrenome" %>
<%= f.text_field :lastName%><br/>
<%= f.label :email, "Email"%>
<%= f.text_field :email%><br/>
<%= f.label :city, "Cidade"%>
<%= f.text_field :cidade%><br/>
<%= f.label :password, "Senha"%>
<%= f.password_field :password%><br/>
<%= f.label :password_confirmation, "Confirme a senha"%>
<%= f.password_field :password_confirmation%><br/>
<%= f.hidden_field :newMusico, :value => true%>
<%= f.submit "Criar Conta", class: "btn btn-large btn-primary" %>
<% end %>
答案 0 :(得分:1)
您正在使用请求中的参数创建新的User
。这包括musician
参数。这相当于:
u = User.new
u.musician = "true"
由于您的Musician
关联,用户实例需要has_one :musician
个实例。
要解决此问题,您可以重命名用于指示是否应将音乐家或工作室添加到新用户的参数,例如: new_musician
我认为你会遇到测试params[:user].new_musician
的问题。 params[:user]
是一个哈希,因此您需要像params[:user][:musician]
一样访问它。此外,它将具有字符串值"true"
或"false"
,因此您需要检查:
if params[:user][:new_musician] == "true"