【问题标题】:Render a partial, but leave out a element in rails渲染部分,但在 rails 中遗漏一个元素
【发布时间】:2014-10-01 19:48:50
【问题描述】:

我想呈现部分但不显示我的一页按钮。我的局部是这样的;

.reward
  %h4== #{number_to_currency(reward.price, precision:0)} Per Month
  %h5= test.test
  %h6 foo
  %p= foo.description
  %a.button.button-green{:href => foo(bar)} foo

我这样称呼它

= render partial: 'foo', collection: bar.rewards

如何在不显示按钮的情况下渲染此部分:这一行:

%a.button.button-green{:href => foo(bar)} foo

【问题讨论】:

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


    【解决方案1】:

    通过部分渲染传递另一个变量。

    部分:

    .reward
      %h4== #{number_to_currency(reward.price, precision:0)} Per Month
      %h5= artist.number_of_supporters
      %h6 Supporters
      %p= reward.description
      - unless nopledge
        %a.button.button-green{:href => new_reward_pledge_path(reward)} Pledge
    

    渲染它:

    = render partial: 'reward', collection: artist.rewards, nopledge: true
    

    对于那些知道这是如何工作的人来说,这相当简单:当你在 Rails 中渲染一个部分(ERb,HAML,任何东西)时,你可以将部分的变量传递给利用。因此,使用render 'reward', collection: artist.rewards 将使“奖励”部分访问artist.rewards 变量,但它会在您的部分中引用为collection。所以你可以像上面的代码那样做。

    【讨论】:

    • 谢谢你说得通。但我仍然遇到问题并且收到此错误:undefined local variable or method 'nopledge' 由于某种原因没有创建变量 ins,我的渲染看起来像这样:= render partial: 'reward', collection: artist.rewards, pledge: true
    • 如果您使用pledge 作为变量,那么代码将不起作用,至少在我提供的情况下不起作用——只有当nopledge 为真时才会删除该元素。这意味着您不必每次都通过它,只是在您不想展示它时。使用unless 并确保您传递的变量是nopledge -- not pledge。只是为了澄清您可能有的任何误解,no 在作为变量前缀时并没有做任何特别的事情。
    • 抱歉打错了。我现在这样称呼它:= render partial: 'reward', collection: artist.rewards, nopledge: true 和部分:- unless nopledge 和错误:undefined local variable or method 'nopledge'
    • 嗯。我将启动一个快速的新 Rails 应用程序,看看有什么用。对不起。
    • @TuxedoTomson 你需要通过locals: {nopledge: true}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2016-07-27
    相关资源
    最近更新 更多