【问题标题】:How to load all associations across all models如何加载所有模型中的所有关联
【发布时间】:2018-02-01 16:02:48
【问题描述】:

我正在制作一个简单的网站来学习 RoR。它允许用户发布电影评论,但我想在我的根视图中实现一个链接,以显示数据库中的所有评论。我怎么做?

我希望能够<%= link_to 'Reviews', reviews_path %>,但我的reviews#index URI 模式是/movies/:movie_id/reviews

为了提取数据库中的所有评论,我在评论模型中添加了什么?

我的评论控制器:

class ReviewsController < ApplicationController
  def create
    @movie = Movie.find(params[:movie_id])
    @review = @movie.reviews.create(review_params)
    redirect_to movies_path(@movie)
  end

  private
  def review_params
    params.require(:review).permit(:email, :comment)
  end

end

审查模型:

class Review < ApplicationRecord
  belongs_to :movie
end

还有我的根视图:

<h3>All Reviews:</h3>
<!-- put link here -->
<h3>Sort By:</h3>
<p>
    <%= link_to 'Release', movies_path(:sort_param => "release") %>
    <%= link_to 'Title', movies_path(:sort_param => "title") %>
</p>

<h1>Popular Movies</h1>
<% @movies.each do |m| %>
   <h2>Title</h2>
   <%= m.title %>
   <%= m.release %>
   <%= link_to 'Show', movie_path(m) %>
<% end %>

编辑:我查看了this 解决方案,但我不确定将代码放在哪里。我试图将它放入 Review 的 index 方法中,但出现错误:

Couldn't find all Reviews with 'id': (all, {:order=>"created_at DESC", :limit=>10})

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    在您的 routes.rb

    resources :reviews, only: [:index] 
    

    reviews_controller.rb

    如果您想以最近的顺序显示任何电影的所有评论,您可以这样做:

    class ReviewsController < ApplicationController
    
      def index
        @reviews = Review.order('created_at DESC').limit(10)
      end
    
      def create
        ...
      end
    
    end
    

    【讨论】:

      【解决方案2】:

      您只能在routes.rb 文件中添加到reviews 的路由。

      resources :reviews, only: [:index]
      

      【讨论】:

      • 我试过了,但现在我有两个与 reviews#index 相关的 URI 模式。 /movies/:movie_id/reviews/reviews 我如何确保它转到正确的位置?
      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多