2014-09-02 3 views
0

В контроллерекак я автоматически нажмите на ссылку, когда страница загружается в рельсах

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%> 

Я получаю все категории, и это уважал пункты меню из базы данных. как автоматически перейти по ссылке первой категории при загрузке страницы.

+0

'если Params [: имя] == Титулы [: name] '?? Почему вы не перенаправляетесь на уровне контроллера? – apneadiving

ответ

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 
+0

Если вы дадите нам больше контекста, мы будем в лучшем положении, чтобы помочь –

0

Вы можете использовать trigger вызвать действие на JQuery, как:

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

Вы можете узнать больше trigger и load page event.

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 
Смежные вопросы