我是Rails的新手,我構建了一個quizz應用程序。 我有一個has_many和belongs_to兩個模型之間建立關聯:級別和問題。rails find_by:添加參考鍵作爲參數獲取第一個項目
#models/level.rb
class Level < ActiveRecord::Base
has_many :questions
end
#models/question.rb
class Question < ActiveRecord::Base
belongs_to :level
attr_accessible :level_id
end
我在我的LevelController中有一個動作'startlevel',它只是列出了所有的級別。
class LevelsController < ApplicationController
def startlevel
@levels = Level.all
end
和帶有鏈接的視圖轉到關卡的第一個問題。我想在鏈接中添加關卡的id作爲參數。我注意到了視圖的url中的1。我不知道爲什麼它會出現在那裏,如果它是我的問題的一部分。
#controller/levels/startlevel/1
<h2>which level would you like to play</h2>
<table>
<tr>
<th>level</th>
</tr>
<% @levels.each do |level| %>
<tr>
<td> level <%=level.number %></td>
<td><%= link_to '<> play this level', :controller => "questions", :action => "answer",:level_id=> level.id%></td>
</tr>
<% end %>
</table>
當我跟着鏈接,我想要去與在的link_to id參數匹配的level_id第一個問題,所以我試圖做到這一點:
class QuestionsController < ApplicationController
def answer
@question = Question.find_by_level_id(params[:level_id])
end
與此鑑於
<p>
<b>Question:</b>
<%=h @question.word %>
</p>
<p>
<b>1:</b>
<%=h @question.ans1 %>
</p>
<p>
<b>2:</b>
<%=h @question.ans2 %>
</p>
<p>
<b>3:</b>
<%=h @question.ans3 %>
</p>
<p>
<b>4:</b>
<%=h @question.ans4 %>
</p>
<%= form_tag(:action => "check", :id => @question.id) do %>
<p>
<b>the correct answer is number: </b>
<%=text_field :ans, params[:ans]%>
</p>
<p><%= submit_tag("check")%></P>
<% end %>
遺憾的是,無論我嘗試了,我得到的最後幾個小時是: 爲無未定義的方法`字」:NilClass (單詞是一個問題的屬性)
我想哭。我究竟做錯了什麼?
p.s.我的想法是在'answer'視圖中添加link_to_unless,除非下一個問題是零,否則我想我需要用相同的引用密鑰對問題進行分組?
要嘗試找出錯誤。你知道你的動作是否被稱爲「應答」嗎? 要檢查,你可以硬編碼你的答案行動,如: '@question = Question.find_by_level_id(1)' – roshiro
你檢查過你的路線嗎?你可以發佈你的routes.rb嗎? –