音乐家期待,得到了弦乐

时间:2013-09-20 19:30:47

标签: ruby-on-rails model controller ruby-on-rails-4

我正在尝试创建一个新用户,但是用户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 %>

1 个答案:

答案 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"