2014-10-19 94 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 2014-10-19 15:09:49

+0

更新我的問題之間的關係!謝謝 – MathRivest 2014-10-19 17:30:00

+0

哪一行發生異常?當你說「在用戶字段中提交錯誤」時,你期望得到什麼結果? – 2014-10-20 08:00:21

回答

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

編輯:

簡化您的控制器代碼,因爲你使用嵌套的屬性,您不再需要手工創建一個用戶。

#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 2014-10-26 18:33:40

+0

@MathRivest此時你的控制器代碼是什麼樣的?任何重大變化?聽起來就像你從屬性創建一個新用戶,而不是分配登錄用戶。 – 2014-10-26 18:52:42

+0

我在我的問題中更新了我的創建控制器代碼!謝謝 – MathRivest 2014-10-26 19:18:44