我使用的是rails 5.1.4,所以我在我的所有用户中都有一个表USER,然后用户可以向其他用户发送好友请求,我想将该请求存储到名为FRIEND的其他表中,例如user_1(发送请求的人) - user_2(被请求者),但您将了解这两个用户(user_1,user_2)来自USER表。
这意味着:首先我有这个表包含所有用户的用户。我想说的是,此表用户中的任何用户都可以与同一个表用户中的任何其他用户成为朋友。
答案 0 :(得分:0)
我不是100%肯定你在问题中提出的要求,但听起来你要做的就是拥有一张名为“用户”的表和另一张名为“朋友”的表,以便能够存储一个朋友请求的值。我相信你想要研究的是" has_many:通过协会"使用"连接表"。观看此视频,它会引导您完成http://blog.teamtreehouse.com/what-is-a-has_many-through-association-in-ruby-on-rails-treehouse-quick-tip
这里有关于Active Record关联http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
的更多信息 修改强>
根据您的下面的帖子,您想要做的只是一个简单的has_many关联。在您的用户模型中添加has_many :friends, dependent: :destroy
并在您的好友模型中添加belongs_to :users
现在转到您的路线文件并通过执行将朋友作为用户的嵌套路线
# nested routes for users
resources :users do
resources :friends
end
在您的朋友表中确保您为迁移中的用户添加了一个外键t.references :user, foreign_key: true
现在在您的friends_controller中,您需要更新这样的操作。替换示例"专利"和你的朋友"对象
class PatentsController < ApplicationController
# first loads @user and then @patent for the below actions.
before_action :set_user, only: [:index, :show, :new, :edit, :create, :update]
before_action :set_patent, only: [:show, :edit, :update, :destroy]
# GET /patents
# GET /patents.json
def index
@patents = @user.patents
end
# GET /patents/1
# GET /patents/1.json
def show
end
# GET /patents/new
def new
@patent = @user.patents.new
end
# GET /patents/1/edit
def edit
end
# POST /patents
# POST /patents.json
def create
@patent = @user.patents.new(patent_params)
respond_to do |format|
if @patent.save
format.html { redirect_to user_patents_path(@patent.user), notice: 'Patent was successfully created.' }
format.json { render :show, status: :created, location: @patent }
else
format.html { render :new }
format.json { render json: @patent.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /patents/1
# PATCH/PUT /patents/1.json
def update
respond_to do |format|
if @patent.update(patent_params)
format.html { redirect_to user_patents_path(@patent.user), notice: 'Patent was successfully updated.' }
format.json { render :show, status: :ok, location: @patent }
else
format.html { render :edit }
format.json { render json: @patent.errors, status: :unprocessable_entity }
end
end
end
# DELETE /patents/1
# DELETE /patents/1.json
def destroy
@patent.destroy
respond_to do |format|
format.html { redirect_to user_url(@user), notice: 'Patent was successfully destroyed.' }
format.json { head :no_content }
end
end
#######################
# private methods
#######################
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:user_id])
end
def set_patent
@patent = Patent.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def patent_params
params.require(:patent).permit(:patent_title, :patent_office, :patent_number, :patent_status, :patent_date, :patent_description, :user_id)
end
end