我有一個與專業,職業和學校的多態關聯的嵌套評論模型。我希望用戶在他們的展示頁面上查看這些專業,學校和職業。另外,我希望他們看到他們在個人資料頁面上所做的所有評論。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 %>