Ruby on rails Rails-在不同的控制器/模型中创建和编辑
我有一个嵌套的评论模型,它与专业、职业和学校具有多态性关联。我希望用户在他们的展示页面上回顾这些专业、学校和职业。此外,我希望他们在个人资料页面上看到所有的评论 我可以让评论显示出来,但我在添加、编辑和删除评论时遇到了麻烦,因为我希望他们在专业、学校、职业或个人资料页面上看到自己的评论时能够执行这些操作 以下是我的路线:Ruby on rails Rails-在不同的控制器/模型中创建和编辑,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,我有一个嵌套的评论模型,它与专业、职业和学校具有多态性关联。我希望用户在他们的展示页面上回顾这些专业、学校和职业。此外,我希望他们在个人资料页面上看到所有的评论 我可以让评论显示出来,但我在添加、编辑和删除评论时遇到了麻烦,因为我希望他们在专业、学校、职业或个人资料页面上看到自己的评论时能够执行这些操作 以下是我的路线: resources :majors, :schools, :careers do resources :reviews end 以下是我的联想: Major.rb,Sc
resources :majors, :schools, :careers do
resources :reviews
end
以下是我的联想:
Major.rb,School.rb,Career.rb
有很多:评论,如:可评论
Review.rb
belongs_to :user
belongs_to :reviewable, polymorphic: true
User.rb
有很多评论吗
以下是我的评论\u 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 %>
我想出来了。问题在于用正确的操作和控制器映射正确的实例变量。大多数实例变量都放在my majors_controller.rb、school_controller.rb和careers_controller.rb show action中。这是我的majors_controller.rbshow action的一部分-我错误地将它们放置在创建操作和删除操作中。但是,当我坐下来思考时,我意识到这一切都发生在节目页面上。以下是我的模型控制器的外观:
def show
@reviewable = @major
@reviews = @reviewable.reviews #show reviews
@reviews_most_liked = @reviewable.reviews.order("created_at DESC").limit(2)
@reviews_most_liked_2 = @reviewable.reviews.order("created_at DESC").limit(2).offset(2)
@review = @reviewable.reviews.build(params[:review]) #create a review
@review.user = current_user #connect the created review to the user
end
然后,在我的majors show.html.erb页面中,我可以通过调用发表评论的人来调用show方法:
<%= review.user.profile_name %>
以及检讨本身:
<%= review.review %>
这将显示审阅。然后我需要创建、编辑和删除。为了创建,我只需要正确地获取实例变量。一旦我在正确的控制器和正确的操作(专业控制器显示操作)下正确获得它们,然后在专业显示页面的模式窗口中,我将表单称为部分:
<%= render 'reviews/form' %>
看起来是这样的:
<%= simple_form_for([@reviewable, @review]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :review, :input_html => { :class => "span4", :rows => 10 },
label: false,
placeholder: 'Help others by sharing what you\'ve learned as a major.' %>
</div>
<div class="modal-footer">
<button class="btn cancel-modal-review" data-dismiss="modal" aria-hidden="true">Cancel</button>
<%= f.submit 'Share My Review', :class => "submit-feedback" %>
</div>
<% end %>
{:class=>span4',:rows=>10},
标签:假,
占位符:“通过分享你作为专业所学到的知识来帮助他人。”%>
取消
“提交反馈”%>