好的,所以我假设您希望每次用户加载特定页面时都显示一个随机模型的链接。假设显示此链接的页面是 ModelController#index 操作。
由于随机化仅在页面最初加载时发生,您可以在控制器操作中执行此操作:
class ModelController < ActionController::Base
#other actions
def index
#any other index code
@random_model = Model.order('random()').first
end
end
现在,在您看来,您可以以通常的方式链接到该模型:
<%= link_to("Shuffle", @random_model, :class => "btn btn-small btn-warning") %>
每次执行控制器操作时,它都会随机选择一个模型,并在呈现页面时包含指向该模型的链接。
编辑地址:
“有没有办法让它工作而不将代码放入索引并显示操作?”
是的。您实际上可以在视图代码中加载模型。通常,将其分配给控制器中的实例变量是“更正确”的方法,但正如您所指出的,它会导致代码重复。如果这是您想在多个视图中包含的内容,我建议将其设为部分视图。像这样:
意见/共享/_shuffle.erb:
<%= link_to("Shuffle", Model.order('random()').first, :class => "btn btn-small btn-warning") %>
然后在您想要包含随机链接的任何页面中呈现该部分:
<%= render 'shared/shuffle' %>
请注意,如果您在页面中多次呈现此部分,则每个链接的随机模型将不同。