Rails 2:如何获取方法的返回对象并将其打印在视图上?

时间:2011-04-18 16:53:48

标签: ruby-on-rails ruby

我几小时前在store_controller.rb开发了一个模糊方法。此方法名为fuzzy,将产品数量作为参数获取,然后使用if语句检查该值并返回名为disp的对象。我在视图index.html.erb上调用此方法。

现在,在视图中,我插入了一行来检查disp的值。根据{{​​1}}的值,视图必须打印出显示产品可用数量的其他图片,例如dispavailable。但是,插入这一行,我收到了一个错误:not available

这是视图undefined local variable or method 'disp' for #<ActionView::Base:0x6dc1864>的代码:

index.html.erb

请注意方法<% for product in @products -%> <div class="entry"> <%= image_tag(product.image_url) %> <h3><%=h product.title %></h3> <%= product.descr %> <br /><div class="disp"> <p><% fuzzy(product.quantity) %><% if disp == 0 %><%= image_tag("nodisp.png", :border => "0") %><% end %><% if disp == 1 %><%= image_tag("disp.png", :border => "0") %><% end %></p> </div><br /> <p><span class="price"><%= number_to_currency(product.price, :unit => "&euro;") %></span></p> <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %> <%= submit_tag "add to cart!" %> <% end %> </div> <% end %> 的调用。此方法已插入fuzzy

store_controller.rb

问题是:当我在视图中执行代码时,调用模糊方法,如何获取方法的结果def fuzzy(q) disp = (q-5)/20 if q > 9 then disp = 1 end if q < 7 then disp = 0 end return disp end ,并使用if语句将其显示在视图上?有可能吗?

2 个答案:

答案 0 :(得分:3)

我将解决您遇到的问题和解决方案。

问题是您希望在视图中访问变量disp,但是在函数fuzzy执行完毕后,此变量超出了范围。如果这没有意义,我会阅读scope in programming

解决方案是你的方法返回一个值(在Ruby中你实际上并不需要明确状态return因为返回了最后执行的行)所以现在你需要分配一个变量从fuzzy调用返回的内容的值。

解决方案(让您的代码工作)是将变量设置为返回值,如下所示:

<% disp = fuzzy(product.quantity) %>

请注意,此disp与您在函数fuzzy中创建的内容不同。它们分为两个不同的范围。

答案 1 :(得分:1)

由于您已经从fuzzy方法返回了所需的值, 您可以将<% fuzzy(product.quantity) %>替换为<% disp = fuzzy(product.quantity) %>,将名为disp的变量设置为fuzzy方法的返回值。这应该与你的其余代码一起使用。