0

私はhas_manyを2つのモデル間の関連付けによって追加しようとしていました。 「スペース」と「質問」。スペース内では、追加する質問を追加することができます。私は、関連のためのspaceQuestionモデルを作成しました。has_many、through:nilのための未定義メソッド `id ':NilClass

現在、私はスペースに追加するすべての質問のリストを見ることができますが、スペースを追加しようとすると次のようになります。未定義メソッド `id 'for nil:NilClassそして、 :@space_question = SpaceQuestion.new(question_id:のparams [:question_id]、space_id:space.id @)

は、ここに私のコードです:

spaces_controller.rb:

def questions 
    @space_questions = @space.questions 
    @other_questions = (Question.all - @space_questions) 
    end 

    def add_question 
    @space_question = SpaceQuestion.new(question_id: params[:question_id], space_id: @space.id) 

    respond_to do |format| 
     if @space_question.save 
     format.html { redirect_to questions_tenant_space_url(id: @space.id, tenant_id: @space.tenant_id) 
      #notice: "User was successfully added to space" 
      } 
     else 
     format.html { redirect_to questions_tenant_space_url(id: @space.id, tenant_id: @space.tenant_id), 
      error: "Question was not added to space" } 
     end 
    end 
    end 

space.rb:

class Space < ActiveRecord::Base 
    belongs_to :tenant 
    belongs_to :department 
    has_many :artifacts, dependent: :destroy 

    has_many :user_spaces, dependent: :destroy 
    has_many :users, through: :user_spaces 

    has_many :space_questions, dependent: :destroy 
    has_many :questions, through: :space_questions 

question.rb:

class Question < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :department 

    has_many :space_questions 
    has_many :spaces, through: :space_questions 

    validates_presence_of :title, :details, :department 
end 

space_question.rb:

class SpaceQuestion < ActiveRecord::Base 
    belongs_to :space 
    belongs_to :question 
end 

questions.html.erb:(スペース内に表示)

<% @other_questions.each do |other_question| %> 
    <tr> 
    <td><%= other_question.department.name %></td> 
    <td><%= link_to other_question.title, question_path(other_question) %></td> 
    <td><%= other_question.user.id %></td> 
    <td> 
     <%= link_to 'Add', 
        add_question_tenant_space_path(id: @space.id, tenant_id: @space.tenant_id, question_id: other_question.id), 
        :method => :put, 
        :class => 'btn btn-xs btn-success' %> 
    </td> 
    </tr> 
<% end %> 
+0

「@スペース」はどのように定義されていますか? – abcm1989

+0

[RESTアーキテクチャ](http://www.sitepoint.com/restful-rails-part-i/)を使用しない理由は何ですか? –

答えて

0

あなたがそのコントロールで前のフックを作成していない限りさらにメソッドで実行されていない@space変数を定義する必要があります。

あなたが見ているエラーは、正確にはその意味です。 @spacenilで、あなたは@space.idです。 NilClassはメソッドidを持たないため、エラーが発生します。

変数を定義するフックを持っている場合は、そのコードを編集してください

+0

あなたの答えは正しいです。私は同じコントローラで前のフックを作成しましたが、そのエラーでコードを再チェックすることは考えられませんでした。問題は私が誤ってbefore_actionでadd_questionを複数形にしたことでした。 ありがとうございます。 –

関連する問題