2014-10-01 49 views
0

我想渲染一个部分,但不显示我的按钮为一个页面。我的部分看起来像这样;渲染一个部分,但遗漏了轨道中的元素

.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 

回答

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。所以你可以像上面的代码那样做。

+0

谢谢,这是有道理的。但我仍然有一个问题,并得到这个错误:'未定义的局部变量或方法'nopledge''由于某种原因,该变量不会被创建,我的渲染看起来像这样:'=渲染部分:'奖励',集合:artist.rewards,pledge:true' – TuxedoTomson 2014-10-01 20:06:56

+0

如果您使用'pledge'作为变量,那么代码将不起作用,至少不会与我提供的内容相同 - 只有在'nopledge'为true 。这意味着你不必每次都通过它,就在你不想展示它的时候。使用'unless'并确保你传递的变量是'nopledge' - * not *'pledge'。只是为了澄清你可能有的任何误解,当没有前缀到变量时,“no”不会做任何特殊的事情。 – Alonessix 2014-10-01 20:12:55

+0

对不起,这是一个错字。我现在把它叫做这样:'= render partial:'reward',collection:artist.rewards,nopledge:true'并且在部分:' - 除非nopledge'和错误:'undefined local variable or method'nopledge '' – TuxedoTomson 2014-10-01 20:17:22