我想返回一个随机网页,我可以将其显示为视图中的链接,但我无法让方法正常工作:
错误:
NoMethodError: undefined method `randomize_webpages' for #<ActiveRecord::Relation::ActiveRecord_Relation_Webpage:0x00000101d84e68>
网页模型
def randomize_webpages
shuffle.first
end
WebpagesController
def index
@webpages = Webpage.all
end
网页的CSV播种机
link
http://www.buzzfeed.com
http://www.reddit.com
http://boston.com
http://phys.org
http://www.popsci.com
http://www.technologyreview.com
http://techcrunch.com
查看Index.html.erb
<%= link_to 'Take Me Anywhere But Here', @random_page %>
答案 0 :(得分:1)
您需要将方法定义为模型的类方法
class Webpage
def self.randomize_webpages
shuffle.first
end
end
而不是
class Webpage
def randomize_webpages
shuffle.first
end
end
请注意,该方法效率很低。您正在加载所有记录,然后选择一个。有更有效的方法。
一种可能的改进是仅选择ID,然后查询该ID。另一种方法是委托底层驱动程序,假设它支持查询。
答案 1 :(得分:0)
你是不是在randomize_webpages
打电话给@webpages
,是吗?这是一个集合,所以你必须做@webpages.first.randomize_webpages
之类的事情或者迭代它们(你没有包含相关的代码,所以我不知道你想做什么)才能使它工作。
答案 2 :(得分:0)
它必须是一个类方法,然后你可以使用sample
:
def self.randomize_webpages
all.sample
end
答案 3 :(得分:0)
您可以为模型添加类方法
class WebPage < ActiveRecord::Base
def self.random
order('RAND()').first
end
....
end
然后你可以从控制器中的WebPage.random
调用它,保存到实例变量,并在视图中使用该实例变量。
请注意'RAND()'是特定于MySQL的。如果您不使用MySql,请搜索正确的语法(如果有)