如何在rails中使用link_to获取params?

时间:2014-10-15 14:21:24

标签: ruby-on-rails ruby ruby-on-rails-4

我的用户有评论,评论可能是消极和积极的 现在我希望为其他用户显示正面和负面评论 users_controllers.rb

class UsersController < ApplicationController

    def show
      @user = User.find(params[:id])
      @reviews = Review.where(for_user_id: @user, negative: false)
      @reviews = @reviews.where(negative: params[:negative]) if params[:negative].present?
      @reviews = @reviews
    end
end

和我的看法 视图/用户/ show.html.erb

<%= link_to 'Negative reviews', user_path(negative: true) %>
            <%= link_to 'Positive reviews', user_path(negative: false) %>
<% @reviews.each do |review| %>
            <li>
              <div class="user_data">
              <div class="user_review_left">
                <%= link_to (avatar_for review.user, size: "50x50"), review.user %>
              </div>
              <div class="user_review_right">
                <%= link_to review.user.name, review.user %>

                <div class="user_post_name">
                  review for: <%= link_to (truncate review.post.name, length: 50), review.post %>
                  </div>
                </div>
              </div>
              <div class="post_review">
                 <%= review.body %>
              </div>
              <div class="review_date">
                <%= l review.created_at, :format => :my %>
              </div>
            </li>
            <% end %>
            </ul>
            </div>

我如何为此代码添加链接? 如果用户链接控制器返回@reviews与params 感谢

3 个答案:

答案 0 :(得分:1)

<%= link_to 'Negative reviews', user_path(@user, negative: true) %>

<%= link_to 'Positive reviews', user_path(@user, negative: false) %>

并更改您的show方法:

def show
  @user = User.find(params[:id])
  @reviews = Review.where(for_user_id: @user, negative: (params[:negative] || false))
end

即使我问自己为什么你不能这样做:

def show
  @user = User.find(params[:id])
  @reviews = @user.reviews.where(for_user_id: @user, negative: (params[:negative] || false))
end

答案 1 :(得分:0)

您可以传递用户ID 审核参数

  

link_to&#34;评论&#34;,user_path(id:@ user.id,negative:true)

答案 2 :(得分:0)

正如coorase所说,在args的末尾添加一个参数将起作用。

<%= link_to 'Negative reviews', user_path(@user, negative: true) %>

会创建一个网址:root / users /:id?negative = true

如果您在处理此问题的控制器操作内部进行调试并评估'params'的值,您将看到如下内容:

{"negative"=>"true", "controller"=>"root", "action"=>"index"}

这是你的params哈希,它意味着

params[:negative] ==> true

(如果您没有使用好的调试器,我建议获取'pry'gem并在控制器操作中插入'binding.pry')

请更具体地解释为什么此输出不适用于您的情况,我可以帮助您制定更好的参数