不能在rails中访问性别方法,即使它在表中

时间:2013-04-11 13:56:05

标签: ruby-on-rails ruby ruby-on-rails-3

所以我正在尝试为应该显示的图像设置一个条件语句

这是我家/索引视图文件中的部分

<% if @cloth.gender == "Female" && @cloth.size == "2T-3T" || "4T-5T" %>

这会在浏览器中返回错误:

undefined method `gender' for #<Array:0x4d2c578>

我将家庭控制器设置为:

def index
  @cloth = Cloth.all
end

所以它应该能够访问所有“布料”,但事实并非如此。当我进入rails控制台时,我可以访问cloth.gender。不知道该怎么做......

https://github.com/yahtaa/oslr

提供的完整代码

3 个答案:

答案 0 :(得分:4)

更好的方法是在@cloths上使用each方法:

<% @cloths.each do |cloth| %<
  <% if cloth.gender == "Female" && cloth.size == "2T-3T" || "4T-5T" %>
....

注意我说@cloths ...您应该将索引def更改为@cloths = Cloth.all(只是因此您​​的代码更清晰一点)。

修改

如评论和codeit的回答所示,条件问题在您最初编写时存在问题。另一种写作方式是

<% if cloth.gender == "Female" && (cloth.size == "2T-3T" || cloth.size == "4T-5T") %>

感谢使用codeit来识别此问题。

答案 1 :(得分:3)

Cloth.all将返回Array的实例。您需要使用each来迭代Cloth.all返回的所有实例,或者使用@cloth[0]获取实例。

答案 2 :(得分:3)

试试这个:

 @cloths.each do |cloth|
   if cloth.gender == "Female" && ["2T-3T", "4T-5T"].include?(cloth.size)
      #Or use  `if cloth.gender == "Female" && (cloth.size == "2T-3T" || cloth.szie == "4T-5T")`
   ..
 end
(cloth.size == "2T-3T" || "4T-5T")值为cloth.size时,

4T-5T将返回false。因为"2T-3T" || "4T-5T"始终是2T-3T