我有一个与专业,职业和学校的多态关联的嵌套评论模型。我希望用户在他们的展示页面上查看这些专业,学校和职业。另外,我希望他们看到他们在个人资料页面上所做的所有评论。Rails - 在不同的控制器/模型中创建和编辑
我可以看到评论,但我在添加,编辑和删除它们时遇到了问题,因为我希望他们在看到他们对主要,学校,职业或他们的评论时能够执行这些操作个人资料页。
这里是我的路线:
resources :majors, :schools, :careers do
resources :reviews
end
这里是我的协会:
Major.rb,School.rb,Career.rb
的has_many:评论,如:审查的
Review.rb
belongs_to :user
belongs_to :reviewable, polymorphic: true
User.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 %>