私は、専攻、キャリア、および学校との多形的な関連を持つネストされたレビューモデルを持っています。ユーザーには、ショーページでこれらの専攻、学校、キャリアを確認してもらいたいと思います。さらに、プロフィールページで行ったすべてのレビューを見てもらいたいです。
レビューを表示することはできますが、メジャー、学校、キャリア、またはプロフィールページでレビューが表示されたときにこれらのアクションを実行できるようにしたいため、レビューの追加、編集、削除に問題があります。
これが私のルートです:
resources :majors, :schools, :careers do
resources :reviews
end
これが私の協会です:
Major.rb、School.rb、Career.rb
has_many:reviews、as:reviewable
Review.rb
belongs_to :user
belongs_to :reviewable, polymorphic: true
User.rb
has_many:reviews
これが私の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 %>