【问题标题】:Brakeman Warning Dynamic Render Path刹车警告动态渲染路径
【发布时间】:2021-10-02 15:25:47
【问题描述】:

我有代码。 users_controller.rb

  def show
    @user = User.find_by id: params[:id]
    @microposts = @user.microposts.order_micropost.paginate(page: params[:page], per_page: 5)
  end

并查看/user/show.html.erb

<% provide :title, @user.name %>
<div class="row">
  <aside class="col-md-4">
    <section class="user-info">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
  <div class="col-md-8">
    <% if @user.microposts.any? %>
      <h3><%= t ".count_microposts", count:  @user.microposts.count %></h3>
      <ol class="microposts">
        <%= render @microposts %>
      </ol>
      <%= will_paginate @microposts %>
    <% end %>
  </div>
</div>

在 micropost/_micropost.html.erb 中

<li id="micropost-<%= micropost.id %>">
  <span class="user">
    <%= link_to micropost.user.name, micropost.user %>
  </span>
  <span class="content">
    <%= micropost.content %>
    <%= image_tag micropost.picture.url if micropost.picture? %>
  </span>
  <span class="timestamp">
    <span class="timeago" title=<%= micropost.created_at %>></span>
  <% if current_user.current_user?(micropost.user) %>
    <%= link_to t(".delete"), micropost, method: :delete,
      data: { confirm: t(".confirm") } %>
  <% end %>
  </span>
</li>

我还警告动态渲染路径,并突出显示&lt;%= render @microposts %&gt;。我该如何修复它以通过brakenman?

这是确切的错误:

Render path contains parameter value near line 15: render(action => User.find_by(:id => params[:id]).microposts.order_micropost.paginate(:page => params[:page]), {})

【问题讨论】:

  • 您应该在问题正文中以文本形式显示您收到的确切错误。
  • 这是确切的错误Render path contains parameter value near line 15: render(action =&gt; User.find_by(:id =&gt; params[:id]).microposts.order_micropost.paginate(:page =&gt; params[:page]), {})
  • 第 15 行是&lt;%= render @microposts %&gt;

标签: ruby-on-rails brakeman


【解决方案1】:

这是一个brakeman的已知问题,如果你只是想让代码通过brakeman,你可以将&lt;%= render @microposts %&gt;更改为&lt;%= render partial: 'micropost', :collection =&gt; @microposts %&gt;

来源:https://github.com/presidentbeef/brakeman/pull/529

【讨论】:

  • 当我输入这个时,Rails 会引发错误:Missing partial users/_micropost, application/_micropost with {:locale=&gt;[:en], :formats=&gt;[:html], :variants=&gt;[], :handlers=&gt;[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}.。然后我修复&lt;%= render 'microposts/micropost', :collection =&gt; @microposts %&gt; have error undefined 局部变量或方法micropost'。你能帮我修一下吗?
  • @TrầnHồng _micropost.html.erb 最好进入view/user 文件夹,因为部分用于用户的索引视图。如果您出于某些特殊原因希望将其包含在 view/micropost 中,则将其写为 &lt;%= render 'micropost/micropost', collection: @microposts %&gt;&lt;%= render partial: 'micropost/micropost', collection: @microposts %&gt;。在您的修复中有一个错字,您写的是microposts,但您的文件夹名称是micropost
  • 对我有用的语法是 ``` = render partial: 'review', collection: @reviews ``
【解决方案2】:

在我的情况下不需要partialcollection,我从:

render @attendance

render "attendances/attendance", attendance: @attendance

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多