2017-08-01 116 views
1

我對Ruby on Rails非常陌生。我試圖做一個文本字段指定我的變量(END_DATE)中的一個,但我不斷收到此錯誤:Ruby on Rails,方法undefined

undefined method `end_date' for #<Quiz:0x007fccd1e0f9c0> 

這裏是我的代碼:

<%# Main Canvas where cardes places %> 
<div class="column large-11" id="main"> 
    <%= form_for @quiz do |q| %> 
    <%= q.label :quiz_name %> 
    <%= q.text_field :quiz_name %> 
    <%= q.label :end_date %> 
    <%= q.text_field :end_date %> 
    <%= hidden_field_tag 'selected', 'none' %> 
    <%= q.hidden_field :classroom_id, value: @classroom_id%> 

    <%= q.submit "Create Quiz", class: "expanded button" %> 
    <% end %> 
    <%= form_tag("/quiz/#{@classroom_id}/copy", method: "get") do %> 
    <%= label :id, "ID" %> 
    <%= text_field_tag "id", "" %> 
    <%= submit_tag "Copy Quiz By ID", class: "expanded button" %> 
    <% end %> 

</div> 
+1

有測驗模型屬性'end_date'嗎? –

+1

塞巴斯蒂安基本上是問,有測驗的end_date列嗎?如果是這樣,active_record會爲你自動創建一個getter/setter。如果end_date不是列,而只是一些表單數據來操作和傳遞,則可以將「attr_accessor:end_date」添加到測驗模型文件以設置虛擬屬性。 – bkunzi01

+0

謝謝大家!我錯誤地試圖手動添加屬性到一個已經存在的模型 - 哎呀! – Vincent

回答

0

讓我打破如何將這些不同的部分涉及到另一個部分,希望能夠讓您更容易排除故障。

<%= form_for @quiz do |q| %> 

這裏要調用form_for創建綁定到@quiz對象的形式。它產生一個form builder對象作爲參數q

<%= q.text_field :quiz_name %> 

在這裏,你正在呼籲與名爲quiz_name領域表單生成器的text_field方法。這意味着它將生成一個文本輸入,並調用@quiz上的quiz_name方法來查找當前值。

所以在這種背景下,應該爲什麼你看到這個錯誤是明顯的:

<%= q.text_field :end_date %> 

你告訴表單生成器調用@quiz.end_date該字段的值,但該方法不存在。

您還沒有給我們足夠的代碼樣本來確定您爲什麼期望此方法存在。也許這是您添加到測驗表的字段,但尚未運行遷移?這是否應該是Quiz上的虛擬屬性?或者,您可能只想發送一個未連接到此表單中的Quiz模型的字段。 (您可以使用單獨的助手來完成此操作,在這種情況下,text_field_tag可讓您在數據來源的位置提供更大的靈活性)。