gpt4 book ai didi

ruby-on-rails - Rails - 在不同的 Controller /模型中创建和编辑

转载 作者:行者123 更新时间:2023-12-04 05:47:32 24 4
gpt4 key购买 nike

我有一个嵌套的评论模型,它与专业、职业和学校具有多态关联。我希望用户在他们的展示页面上查看这些专业、学校和职业。此外,我希望他们在个人资料页面上看到他们所做的所有评论。

我可以显示评论,但我在添加、编辑和删除评论时遇到了麻烦,因为我希望他们在看到关于专业、学校、职业或个人资料的评论时能够执行这些操作页。

这是我的路线:

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

这是我的 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 %>

最佳答案

我想通了。问题在于将正确的实例变量映射到正确的操作和 Controller 。大多数实例变量都放在我的 majors_controller.rb、school_controller.rb 和 careers_controller.rb show action 中。这是我的 majors_controller.rb show action 的一部分 - 我错误地将它们放在创建操作和删除操作中。但是,一旦我坐下来思考它,我就意识到这一切都发生在展示页面中。这是我的模型 Controller 的样子:

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

然后在我的专业 show.html.erb 页面中,我可以通过调用给出评论的人来调用 show 方法:

<%= review.user.profile_name %>

和评论本身:

<%= review.review %>

显示评论。然后我需要创建、编辑和删除。为了创建我只需要让实例变量正确。一旦我在正确的 Controller 和正确的操作(主要 Controller 显示操作)中使它们正确,然后在专业显示页面的模式窗口中,我将表单称为部分:

 <%= 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 %>

关于ruby-on-rails - Rails - 在不同的 Controller /模型中创建和编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com