2017-05-25 16 views
0

私は質問の入力と5つの入力を持つフォームを作成しようとしていますが、それぞれが回答の選択肢を表しています。Railsビューでフォーム入力パラメータを表示できません

私の問題は、私の/show.html.erbファイルで、私は理解できないエラーを投げます。例えば

QUESTION 
ANS1 
ANS2 
ANS3 
ANS4 
ANS5 

は、ここで私がこれまで持っているものです。

# app/views/mcqs/new.html.erb 
<%= form_for :mcq, url: mcqs_path do |f| %> 

    <%= f.label :title %><br> 
    <%= f.text_field :q %> 

    <%= f.label :ans1 %><br> 
    <%= f.text_field :ans1 %> 

    <%= f.label :ans2 %><br> 
    <%= f.text_field :ans2 %> 

    <%= f.label :ans3 %><br> 
    <%= f.text_field :ans3 %> 

    <%= f.label :ans4 %><br> 
    <%= f.text_field :ans4 %> 

    <%= f.label :ans5 %><br> 
    <%= f.text_field :ans5 %> 


    <%= f.label :category_id %><br> 
    <%= f.number_field :category_id %> 

    <%= f.label :tags %><br> 
    <%= collection_check_boxes(:mcq, :tag_ids, Tag.all, :id, :name) %> 

    <%= f.submit %> 

<% end %> 

コントローラ:

# app/controllers/mcqs_controller.rb 
class McqsController < ApplicationController 
    def new 
     @Mcq = Mcq.new 
    end 

    def index 
     @questions = Mcq.all 
    end 

    def show 
     @Mcq = Mcq.find(params[:id])  
    end 

    def create 
     @Mcq = Mcq.new(params[:mcqs]) 
     # @Mcq.save returns a boolean indicating whether the article was saved or not. 
     if @Mcq.save 
      redirect_to @Mcq 
     else 
      render 'new' 
     end 
    end 
end 

ビュー:

# app/news/mcqs/show.html.erb 
<strong>MCQ Title:</strong><br> 
<%= mcq.q %> 

<strong>Question Text:</strong><Br> 
<%= mcq.ans1 %> 

...<strong>MCQ Title:</strong><br> 
<%= mcq.q %> 

<strong>Question Text:</strong><Br> 
<%= mcq.ans1 %> 
... 

エラー:

NameError in Mcqs#show 
Showing app/views/mcqs/show.html.erb where line #4 raised: 

undefined local variable or method `mcq' for #<# 
<Class:0x007fad811936e8>:0x007fad838a47a0> 

<strong>MCQ Title:</strong><br> 
<%= mcq.q %> 
</p><p> 

どのように私はこのエラーなしshow.html.erbnew.html.erbの入力を表示することができます?。 <%= @mcq.q %>は機能しません。あなたはMcq.find(params[:id])として@Mcqを作成したが、その後、あなたのshowビューで、あなたがコントローラの中でそれを宣言したとして、それを同じように(名前)にアクセスする必要があるので、mcqとしてそれにアクセスしたい。あなたのshow方法で

答えて

3

で試してみてください:

<strong>MCQ Title:</strong><br> 
<%= @Mcq.q %> 

あなたは、コントローラ(show法)に@mcqを作成し、あなたが@Mcqを使用して、そのメソッドに応答ビューでにアクセスしたい場合は、あなたが受け取ることになりますNilClassのオブジェクト、つまり、名前が一致しない場合、それらは機能しません。

コントローラで@mcqを使用していて、次にmcqとしてアクセスする場合は、コントローラ上のコントローラはインスタンス変数で、コントローラからのビューで使用することはできません2番目の変数はローカル変数で、おそらくundefined local variable or method 'variable'というエラーが発生します。

The main difference between local and instance variable is that local variable is only available in controller, where as instance variable is available in corresponding views also. The controller and views do not share local variables

+0

@Mcqとmcqの違いを説明できますか? @記号と毛管の違いは?なぜそれは重要ですか? – mazing

+1

私は@mazingという答えを更新しました。 –

+0

すばらしい説明をありがとう!:) – mazing

1

変更@mcpに、コントローラ内のすべての@Mcq、とも@mcqに新しいビューに:mcqを変更、@mcqにビュー内のすべてのmcqを変更:

私は@Anhubawして引用することができます。

@の変数接頭辞は、インスタンス変数であることを意味します。ビューでアクセス可能で、通常の変数は@で開始しませんが、コントローラのアクションメソッドでのみ使用できます。 。

+0

それはうまくいかなかった、ショーフィールドは今空白の結果を表示しています。ありがとう、結構です! – mazing

関連する問題