2013-09-20 3 views
0

Я пытаюсь создать нового пользователя, но User has_one Musician и 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"=>"[email protected]", 
"city"=>"Mogi", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]", 
"musician"=>"true"}, 
"commit"=>"Criar Conta"} 

EDIT: Форма

<%= 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 %> 
+2

Музыкант ожидал, получил гитарист :-) :-)? –

+0

'Musician.New' - проблема. Дело имеет значение на языке, чувствительном к регистру. Это также несколько загадочные отношения. Похоже, вы пытаетесь установить флаг в true/false, указав, является ли пользователь музыкантом, который имеет больше смысла, чем пользователь *, имеющий * музыканта. – meagar

+0

Это происходит потому, что по умолчанию все пользователи являются музыкантами, но если администратор создает пользователя, пользователь является Studio, а модели имеют разные столбцы. На самом деле пользователь музыкант (или студия) –

ответ

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" 
+0

Я получил вашу мысль, но я не понял, как я могу установить логическое значение в форме (это будет скрытое поле), чтобы выбрать между созданием Музыканта или Студии , и они связывают пользователя с его моделью. Я отредактирую свой вопрос на место, покажу форму –

+0

Если я беру эту информацию из формы, она работает, но как я могу узнать, какой тип пользователя создается без создания нового столбца? –

+0

Если я просто добавлю attr_accessible: newMusician, я получил ошибку: неизвестный атрибут: newMusician –

Смежные вопросы