2014-10-19 3 views
0

У меня есть работа и пользователь (изобретать) форму в том же представлении. Когда я пытаюсь представить с ошибками в полях пользователя, он дает мне страницу с исключениями с сообщениями проверки. Отправка ошибок в полях работы отлично работает!Рельсы проверки вложенной формы 3.2

job_controller.rb 
def new 
    @job = Job.new 
    if !current_user 
    @job.user = User.new 
    end 

    respond_to do |format| 
    format.html # new.html.erb 
    end 
end 

    def create 
    @types = Type.all 
    @categories = Category.all 

    @job = Job.new(params[:job]) 
    #if not logged in creates a user and sign in 
    if !current_user 
     @user = User.new(params[:job][:user_attributes]) 
    else 
     @user = current_user 
    end 

    @job.user_id = @user.id 

    respond_to do |format| 
     if @job.save 
     if !current_user 
      sign_in(:user, @user) 
     end 
     format.html { redirect_to @job } 
     else 
     format.html { render action: "new" } 
     end 
    end 
    end 

    job.rb 
    attr_accessible :user_attributes, :description, :name .... 
    belongs_to :user 
    accepts_nested_attributes_for :user 

Спасибо!

+0

вы можете показать работу model.what отношения между пользователем и работой класса – Hemali

+0

Обновлены моим вопросом! спасибо – MathRivest

+0

В какой строке произошло исключение? И какой результат вы ожидаете, когда говорите «отправляете с ошибками в полях пользователя»? –

ответ

1

Это, потому что вы вызываете, @user.save!, который будет генерировать исключение. Также выполнение этого способа не будет помещать задание в ту же транзакцию, что и Пользователь. То, что вы хотите, это nested_attributes:

class Job < ActiveRecord::Base 

    accepts_nested_attributes_for :user 

end 

Если пользователь вошел в систему, не показывают, что часть формы и фильтровать эти Params.

Дополнительная информация приведена в документации по Rails здесь http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

EDIT:

Упростить код контроллера, так как вы используете вложенные атрибуты вам больше не нужно вручную создать пользователя.

#if not logged in creates a user and sign in 
if !current_user 
    @user = User.new(params[:job][:user_attributes]) # this is no longer needed 
else 
    @user = current_user 
end 

@job.user_id = @user.id # this is redundant 

что-то более, как:

# if logged in, manually assign the user (also you may want to reject any user attributes) 
@job.user = current_user if current_user 
+0

По какой-то причине, когда я удаляю @ user.save! все работает как ожидалось (хорошо). Запись сохранена правильно, но я перенаправлен обратно на новое представление с ошибкой, говорящей, что «письмо уже принято». – MathRivest

+0

@MathRivest, как выглядит ваш код контроллера на этом этапе? Какие-либо значительные изменения? Похоже, вы создаете нового пользователя из атрибутов, а не назначаете зарегистрированного пользователя. –

+0

Я обновил свой код контроллера создания в своем вопросе! спасибо – MathRivest

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