如何在rails中加载页面时自动单击链接

时间:2014-09-02 09:02:07

标签: ruby-on-rails

在控制器中

if params[:name]==params[:name]   
  @categories=Category.where(:hotel_id=>params[:hotel_id])
  @menus=Menu.where(:category_id=> params[:id]).sorted   
  @cart = current_cart
end

在索引页面中:

<%@categories.each do |d|%>
<%= link_to d.name ,{:action=>'index',:id=>d.id,:hotel_id=>d.hotel_id},class: "btn-orange" %>       
<%end%>

我正在获取所有类别,并且它是来自数据库的受尊重的菜单项。如何在页面加载时自动点击第一个类别链接。

3 个答案:

答案 0 :(得分:1)

要直截了当地回答您的问题,您必须use JQuery to invoke the click event

#app/assets/javascripts/application.js
var loaded = function(){
   $("a.first_link").trigger("click");
};
$(document).on("page:load ready", loaded);

-

<强>结构

毋庸置疑,这并不意味着您将构建一个强大,高效的系统。相反,这意味着你将召集一个你不应该做的事件。

正如评论中所提到的,看起来你的控制器就是这种类型business logic应该出现的地方:

#config/routes.rb
resources :hotels do
   resources :categories
end

#app/models/hotel.rb
class Hotel < ActiveRecord::Base
   has_many :categories
end

#app/models/category.rb
class Category < ActiveRecord::Base
   has_many :menus
end

#app/controllers/categories_controller.rb
class CategoriesController < ApplicationController
   before_action :set_cart

   def index
      @hotel =      Hotel.find params[:hotel_id]
      @categories = @hotel.categories      
      @menus =      @categories.find(params[:id]).menus.sorted
   end

   private

   def set_cart
      @cart = current_cart 
   end
end

答案 1 :(得分:0)

您可以使用trigger来调用jquery上的操作,如下所示:

$(documnet).on("page:load ready", function(){
  $("a.first_link").trigger("click");
})

您可以阅读更多triggerload page event

答案 2 :(得分:0)

使用each_with_index获取/检测第一个元素(这是你想要的),然后使用jquery点击它

查看文件

<%@categories.each_with_index do |d,index|%>

<%= link_to d.name ,{:action=>'index',:id=>d.id,:hotel_id=>d.hotel_id},id:first_"#{index}",class: "btn-orange" %>       

<%end%>

====================js code to click when page is ready============

$(document).ready(function(){

setTimeout(function() {
   //click after 2 seconds when page loads or remove it or use=> $('#first_0').trigger('click'); directly without setTimeout in document.ready()
   $("#first_0").click();
}, 2000);

})//document ends