我有一个嵌套评论模型,它与专业、职业和学校有多态关联。我希望用户在他们的展示页面上查看这些专业、学校和职业。此外,我希望他们看到他们在个人资料页面上所做的所有评论。
我可以显示评论,但我无法添加、编辑和删除它们,因为我希望他们能够在他们在专业、学校、职业或个人资料页面上看到他们的评论时执行这些操作。
这是我的路线:
resources :majors, :schools, :careers do
resources :reviews
end
以下是我的联想:
Major.rb、School.rb、Career.rb
has_many :reviews, as :reviewable
评论.rb
belongs_to :user
belongs_to :reviewable, polymorphic: true
用户.rb
has_many :评论
这是我的reviews_controller.rb:
before_filter :reviewable
def index
@reviews = @reviewable.reviews
@major = Major.includes(:reviews => :user).find_by_slug(params[:id])
end
def show
@review = @reviewable.reviews.find(params[:id])
end
def new
@review = @reviewable.reviews.build
@review.user = current_user
end
def edit
@review = @reviewable.reviews.find(params[:id])
raise(ActiveRecord::RecordNotFound, "Access Denied") if @review.user != current_user
end
def create
@review = @reviewable.reviews.build(params[:review])
@review.user = current_user
@reviews = @reviewable.reviews
end
def destroy
@review = @reviewable.reviews.find(params[:id])
@review.destroy
raise(ActiveRecord::RecordNotFound, "Access Denied") if @review.user != current_user
end
def reviewable
@reviewable = if params[:major_id]
Major.find_by_slug!(params[:major_id])
elsif params[:school_id]
School.find(params[:school_id])
elsif params[:career_id]
Career.find(params[:career_id])
end
end
例如,为了创建、查看和编辑专业的评论,他们将在主要节目页面上进行。这就是我在 majors_controller.rb 上的内容:
def show
@reviews = Review.includes(:user)
@reviews_most_liked = Review.order("created_at DESC").limit(4)
end
我正在努力做到这一点,以便他们可以从专业、学校和职业展示页面内的模式窗口中添加和编辑。这是我在模态窗口中的内容:
<%= simple_form_for([@reviewable, @review]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :review %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>