错误是未定义的方法' get_image_url'对于Item,即使在声明辅助方法之后也是如此。
虽然我不明白为什么应该明确启用视图中的某些内容来调用控制器方法。
这是模型方法
def item_url
return self.image_url # simplified version for simplicities sake
end
并在控制器中
def get_image_url
Item.item_url
end
helper_method :get_image_url
视图中的
<% @items.each do |item| %>
<img src="<%= item.get_image_url%>"></img>
<% end %>
我不知道该怎么做,我觉得我的设计并不理想,我需要一些经验丰富的开发人员的反馈。啊
答案 0 :(得分:1)
首先,您尝试从非启动对象调用实例方法
item_url
如果您正在呼叫裸体&#34;那么#Instance
def get_image_url
@item = Item.find(1)
@item.item_url
end
#Class
def get_image_url
Item.item_url
end
def self.item_url
item = find(1)
item.image_url
end
应为class method。 model,或者应该初始化为调用实例方法:
helper
您遇到的下一个问题是,您正在调用您认为是get_image_url
的实例方法。问题是您直接引用模型,应该通过模型
<强>修正强>
没有必要调用item_url
方法 - 您无论如何都只是路由到模型方法。您应该在模型中将get_image_url
重命名为clothing_item
,并将其作为实例方法从您的视图中调用。由于您的Item
对象是<% @clothing_items.each do |clothing_item| %>
<img src="<%= clothing_item.get_image_url%>"></img>
<% end %>
#app/models/item.rb
def get_image_url
image_url # simplified version for simplicities sake
end
模型的初始化版本,因此您可以在其上使用实例方法没问题:
{{1}}
答案 1 :(得分:1)
当您在类get_image_url
的对象上调用Item
之类的方法时,Rails会在Item
中的item.rb
类定义中查找方法定义。但是Rails并没有在那里找到它。因此,Rails说这个方法是未定义的。
另一个问题是Item.item_url
。这是在Item
类本身上调用方法,而不是该类的对象或对象。因此,您需要将item_url
模型中的方法Item
定义为类方法(而不是实例方法)。
但是,如果您的目标是单独显示每个项目的图像,我认为您根本不需要使用课程方法。您可以按原样使用视图文件,并在模型中将get_image_url
定义为实例方法。