2014-02-18 21 views
-1

我有一个控制器donations_controller渲染中轨与一些变量视图

class DonationsController < ApplicationController 
    def index 
    donation = Donation.find_by_id(1).donation 
    donation_percent = donation.to_f/50*100 
    end 
end 

和视图donations/_index.html.erb

<div class="progress"> 
    <div class="bar" style="width:<%[email protected]_percent%>%;"></div> 
</div> 
<p>Donated: &euro;<%[email protected]%></p> 

当我尝试呈现它的任何其他视图内(例如,static/index.html.erb - 我的网站主页),它没有变量就被渲染。这里是我使用的代码

... 
<%=render partial: "donations/index", donation: @donation, donation_percent: @donation_percent%> 
... 

我该怎么做才能渲染变量?谢谢。

+0

你甲肝e '<%= yield %>' 在您的布局? –

+0

当然,我有,但它怎么能帮助我? – enjaku

回答

1

你需要把从控制器要在意见纳入实例变量来访问值,所以:

class DonationsController < ApplicationController 
    def index 
    @donation = Donation.find_by_id(1).donation 
    @donation_percent = @donation.to_f/50*100 
    end 
end 

接下来,你index观点几乎是正确的,你通过这些实例变量为部分当地人(但忘了包起来当地人哈希):

... 
<%=render partial: "donations/index", locals: {donation: @donation, donation_percent: @donation_percent} %> 
... 

但在局部,你应该叫他们为本地变量

<div class="progress"> 
    <div class="bar" style="width:<%= donation_percent %>%;"></div> 
</div> 
<p>Donated: &euro;<%= donation %></p> 
0

您不必在布局中手动渲染部分。将<%= yield %>放在应该是部分的位置,Rails将处理选择并为当前操作呈现正确的模板。

至于您的原始问题 - 要从另一个模板呈现一个模板,请使用render partial而不是render template

有关更多说明,请参见官方Rails guide

+0

我需要它不在产量内,我需要它作为布局的一部分。 – enjaku

1

它不能够访问@donation,因为它没有被定义为捐赠#索引操作(假设)以外。

你有两个选择 1)要么你把代码,无论你要访问的捐赠

@donation = Donation.find_by_id(1).donation 
@donation_percent = @donation.to_f/50*100 

2)或声明的部分模板,而不是渲染模板呈现为局部和重命名你的文件以 '_index.html.haml'

渲染部分: '捐款/指标',捐赠:@donation

变化从@donation变量名捐赠

+0

我已经完成了它,但没有任何改变,即使我尝试在任何其他视图内渲染。根据你的回答我会重写我的问题。 – enjaku