2014-10-03 68 views
-1

我有一個工作用戶表。 我已經生成使用新表:Rails:引用新模型引發錯誤

rails generate model quiz_answers 

..和運行耙分貝:遷移

我CreateQuizAnswers遷移文件看起來像這樣:

class CreateQuizAnswers < ActiveRecord::Migration 
    def change 
    create_table :quiz_answers do |t| 
     t.references :user, index: true 
     t.string :answer1 
     t.string :answer2 
     t.string :answer3 
     t.string :answer4 
     t.string :answer5 
     t.string :answer6 
     t.string :answer7 
     t.string :answer8 

     t.timestamps 
    end 
    end 
end 

我有一個quiz_answer模式:

class QuizAnswer < ActiveRecord::Base 
    belongs_to :user 
end 

和QuizAnswersController:

class QuizAnswersController < ApplicationController 
    def new 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 

    private 

    def post_params 
     params.require(:quiz_answer).permit(:body, :user_id) 
    end 
end 

我已經加入:quiz_answers爲編輯在routes.rb中

資源問題:

那麼,爲什麼當我嘗試建立一種形式(用設計)做我爲...提供錯誤「未定義的方法體」(此處參考QuizAnswer)「?我有另一個模型'Post',它不會產生這個錯誤,也沒有'body'屬性。

在那裏我試圖建立表單的頁面是家庭/ whattypeofleader.html.erb,在routes.rb中我有:

get "whattypeofleader" => "home#whattypeofleader" 

在我的HomeController我有:

class HomeController < ApplicationController 
    def index 
    end 

    def whattypeofleader 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 
end 

我該怎麼做錯了?任何幫助拼命感謝,謝謝。

哦,如果你需要它,這裏的表單代碼,部分是獲取whattypeofleader「渲染」:

<%= form_for([current_user, @quiz_answer]) do |f| %> 
    <p> 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 
    </p> 
    <p> 
    <%= f.submit("Save entry") %> 
    </p> 
<% end %> 
+2

您是否在用戶模型中添加了has_many關聯? – Mandeep 2014-10-03 08:49:25

+0

我有has_many:用戶的quiz_answers。rb – moosefetcher 2014-10-03 08:50:59

+3

@moosefetcher然後你想'current_user.quiz_answers.build' - 多元化 – 2014-10-03 08:51:38

回答

0
<%= form_for([current_user, @quiz_answer]) do |f| %> 
    #... 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 

您在這裏創建一個text_area,你告訴Rails將此文本區域輸入與@quiz_answer.body屬性綁定。爲什麼?

form_for將數組的最後一個元素賦值爲窗體的對象。它會生成一個表單構建器對象(f),該對象保留對該對象的引用(f.object)。使用此表單構建器創建的所有字段都將自動填充值爲f.object.send(:field_name)(它還設置了字段的名稱,因此可以在發佈時輕鬆匹配參數)。這是軌道魔術,使模型數據填充所有表單域。

由於您的模型沒有body屬性(數據庫中沒有這樣的列,也沒有定義該名稱的方法),因此f.object.send(:body)將引發method undefined錯誤。

關於解決這個問題,您需要決定如何查找此表單。你的模型包含8列,answer<i>(這是令人擔憂的,並建議你可能想在這裏使用關聯)。

+0

我已經從使用「帖子」的工作版本複製了此表單代碼。我只是將f.text_area用作測試,因爲它在'posts'情況下工作。我明白f是FormBuider--我完全理解OOP。我想了解所謂的鐵軌'魔術'。爲什麼'post'可以訪問:body(儘管沒有body屬性),'quiz_question'不是?爲什麼我擔心我的桌子有8列?請解釋一下 - 我正在接受我的束縛。謝謝。 – moosefetcher 2014-10-03 10:17:14

+0

@moosefetcher - 你爲什麼說'posts'沒有body屬性?你可以發佈你的模式的帖子表以及帖子模型嗎? – BroiSatse 2014-10-03 10:18:53

+0

確定 - '發佈'在遷移文件中定義了一個主體屬性,這對我來說是新聞。謝謝你指點我那個文件。我想我現在需要問一個新問題:quiz_answers表應該如何工作。再次感謝。 – moosefetcher 2014-10-03 10:24:26