Ruby on rails 创建多个关系
我正在开发一个问答应用程序,我想增加人们发布答案的能力 我已经构建了一个迁移,以便问题具有与用户相同的idRuby on rails 创建多个关系,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在开发一个问答应用程序,我想增加人们发布答案的能力 我已经构建了一个迁移,以便问题具有与用户相同的id rails g migration将用户id添加到问题中,然后添加有很多/属于关联 现在我被困在如何为答案建立关系的问题上 我已经添加了一个答案: railsgscaffold答案:整数 然后我做了一个迁移:(这是一个正确的举动吗?创建一个迁移,使答案与问题具有相同的ID?) rails g迁移将\u-answer\u-id\u添加到\u-answers 并添加了也有许多/属于 但是现在呢
rails g migration将用户id添加到问题中,然后添加有很多/属于关联
现在我被困在如何为答案建立关系的问题上
我已经添加了一个答案:
railsgscaffold答案:整数
然后我做了一个迁移:(这是一个正确的举动吗?创建一个迁移,使答案与问题具有相同的ID?)
rails g迁移将\u-answer\u-id\u添加到\u-answers
并添加了也有许多/属于
但是现在呢?如何使答案与问题的ID相同?因为在show视图中,如果用户发布答案,基本上每个问题都可以看到答案
显示视图:
<% @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 %>
“宽度:75px;”%>
“bg”%>
:delete,:class=>“文本静音白色”%>
用户模型:
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用户:破坏
有很多:答案,:依赖=>:毁灭
设计:数据库可验证,可注册,
:可恢复,:可记忆,:可跟踪,:可验证
结束
问题模式:
class Question < ActiveRecord::Base
belongs_to :user
has_many :answers
end
类问题
答案模式:
class Answer < ActiveRecord::Base
belongs_to :user
belongs_to :question
end
class-Answer
应答控制器:
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
类应答器控制器
不要让答案与问题具有相同的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
你真的还在使用RubyonRails3吗?