【发布时间】:2016-01-31 05:00:00
【问题描述】:
我在理解如何设置贡献控制器和视图中的表单时遇到了一些麻烦。我在视图中设置了一些表单,所以我知道连接表可以工作。
截至目前,一个帖子属于_to user && a user has_many posts
目标:
1. user1 创建 post - 属于 user1
2. user2 请求加入 user1_post 作为贡献者
3. user1 接受或拒绝请求
4. user2 现在是 user1_post 的贡献者
5. user1 可以移除 user2 作为贡献者
得到has_many:通过正确设置并在控制台中对其进行了测试
contribution.rb
class Contribution < ActiveRecord::Base
belongs_to :post
belongs_to :user
def accept
self.accepted = true
end
end
post.rb
class Post < ActiveRecord::Base
belongs_to :author, class_name: 'User'
has_many :contribution_requests, -> { where(accepted: false) }, class_name: 'Contribution'
has_many :contributions, -> { where(accepted: true) }
has_many :contributors, through: :contributions, source: :user
end
user.rb
class User < ActiveRecord::Base
has_many :posts, foreign_key: 'author_id'
has_many :contribution_requests, -> { where(accepted: false) }, class_name: 'Contribution'
has_many :contributions, -> { where(accepted: true) }
has_many :contributed_posts, through: :contributions, source: :post
end
contributions_controller.rb
class ContributionsController < ApplicationController
def create
@contribution = current_user.contributions.build(:user_id => params[:id])
if @contribution.save
flash[:notice] = "Added contributor."
redirect_to posts_path(@post)
else
flash[:error] = "Unable to add contributor."
redirect_to posts_path(@post)
end
end
def destroy
@contribution = current_user.contributions.find(params[:id])
@contribution.destroy
flash[:notice] = "Removed contributor."
redirect_to root_url
end
end
【问题讨论】:
标签: ruby-on-rails controller has-many-through