2016-02-21 149 views
1

我正在開發一個Q &一個應用程序,事情是,我想增加人們發佈答案的能力。創建多個關係

我已經建立了一個遷移,以便問題具有與 rails g migration add_user_id_to_questions的用戶相同的ID,然後添加has_many/belongs_to關聯。

現在我堅持如何創建一個關係的答案。

我已經添加了一個答案支架搭配: rails g scaffold Answer answer:integer

然後我做了遷移:(?是不是一個正確的做法,以創建一個遷移,這樣的答案有相同ID的問題)

rails g migration add_answer_id_to_answers

並添加了has_many/belong_to以及。

但現在呢?我如何回答具有相同問題的ID?由於放映視圖中,如果用戶帖子的答案將主要是可見的每一個問題...

顯示視圖:

 <% @answers.each do |answer| %> 

     <div class="well bgBlack"> 
      <div class="media"> 
      <a class="pull-left"> 
      <% if answer.user.avatar.blank? %> 
       <img src="http://www.adtechnology.co.uk/images/UGM-default-user.png" style="width: 75px;"> 
      <% elsif answer.user.avatar %> 
       <%= image_tag answer.user.avatar, :style => "width:75px;" %> 
      <% end %> 
      </a> 
      <div class="media-body"> 
       <p class="white"><%= link_to answer.user.username, answer.user, :class => " bg" %></p> 
       <p class="white small"><%= answer.answer %></p> 
      </div> 
      <div class="pull-right"> 
       <% if user_signed_in? %> 
        <% if answer.user_id == current_user.id %> 
         <%= link_to 'delete', answer_path(answer), :method => :delete, :class => "text-muted white" %> 
        <% end %> 
       <% end %> 
      </div> 
     </div> 
     </div>     

     <% end %> 

用戶模式:

class User < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 
    has_many :questions, :dependent => :destroy 
    has_many :answers, :dependent => :destroy 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

問題模型:

class Question < ActiveRecord::Base 
    belongs_to :user 
    has_many :answers 
end 

答型號:

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 
end 

答控制器:

class AnswersController < ApplicationController 
    before_action :set_answer, only: [:destroy] 

    respond_to :html 

    def create 
    @answer = current_user.answers.build(answer_params) 
    @answer.save 
    redirect_to :back 
    end 

    def destroy 
    @answer.destroy 
    redirect_to :back 
    end 

    private 
    def set_answer 
     @answer = Answer.find(params[:id]) 
    end 

    def answer_params 
     params.require(:answer).permit(:answer) 
    end 
end 
+1

你真的仍與Ruby on Rails的3個工作? – Raffael

回答

1

不要讓答案有相同ID的問題,你必須讓答案有自己的id,並且列有其當前的回答屬於問題ID。 只需加上

t.belongs_to :question 

您的答案遷移。

然後運行顯示查看,你需要有這個在您的問題控制器問題

rake db:migrate:redo VERSION="version of answers migration(numbers in files name)" 

,並顯示出正確的答案顯示行動

def show 
    @question = Question.find(params[:id]) 
    @question.answers.all 
end 

希望這有助於:)

-------------------------------------------------- -------------------------------------------------- -------------------------------- 編輯

同時添加到您的問題模型

has_many :answers, dependent: :destroy #if you want assosiated answers to be deleted after you delete question. 
accepts_nested_attributes_for :answers, reject_if: :all_blank