控制器不在rails中调用

时间:2016-02-15 18:22:19

标签: ruby-on-rails controller

我想将params从一个视图传递到另一个视图。在我的index.html.erb中,我有一个空的div:

index.html.erb:

<div id="main"> </div>

首先,我通过以下链接在侧栏中加载main.html.erb文件:

side.html.erb

<%= link_to image_tag('btn_next.png'), home_main_path(:game_id=>item.game.id), :remote => true %>

这是将我的main.html.erb文件加载到main-div中。这是一些代码:

main.js.erb

$("#main").html("<%= escape_javascript render(:file => 'home/main.html.erb', :handlers => [:erb]) %>");

home_controller.rb

def main
    puts 'main called'
    ...

日志

main called


Started GET "/home/main?game_id=1" for 127.0.0.1 at 2016-02-15 18:54:37 +0100
Processing by HomeController#main as JS
  Parameters: {"game_id"=>"1"}

一切正常。现在,在main.html.erb中,我有一个指向game_main.html.erb文件的链接:

main.html.erb

<%= link_to I18n.t('basic.game_statistic'), home_game_main_path(:game_id => @game.id, :mode => 'GameGoals'), :remote => true, :class => "main" %>

这里有一些game_main链接的代码:

game_main.js.erb

$("#main").html("<%= escape_javascript render(:file => 'home/game_main.html.erb', :handlers => [:erb]) %>");

home_controller.rb

def game_main
    puts 'game_main called'
    ...

html文件在main-div中加载。但是没有调用game_main-controller。我的日志:

日志

Started GET "/home/game_main?game_id=1&mode=GameGoals" for 127.0.0.1 at 2016-02-15 19:13:19 +0100
Processing by HomeController#game_main as JS
  Parameters: {"game_id"=>"1", "mode"=>"GameGoals"}

没有通知&#39; game_main被称为&#39;。所以我无法得到参数。什么地方出了错?我能够处理HomeController#main但不能处理HomeController#game_main。

感谢您的帮助。

拉​​斯

P.S。:我的路线:

的routes.rb

match '/home/main', :to => 'home#main' 
match '/home/game_main', :to => 'home#game_main' 

佣金路线

home_main        /home/main(.:format)                  home#main
home_game_main   /home/game_main(.:format)             home#game_main

2 个答案:

答案 0 :(得分:0)

这是因为您正在使用

  

呈现

$("#main").html("<%= escape_javascript render(:file => 'home/game_main.html.erb', :handlers => [:erb]) %>");

渲染视图文件不会执行任何方法。您需要在link_to超链接中显式调用该方法。

答案 1 :(得分:0)

最后我找到了答案,实际上这是我的错误。在我的home_controller中,我定义了两次game_main动作。我删除了一个动作,但它确实有效。

结论:

  1. 如果定义了两次,控制器内的动作将不会被调用。
  2. 如果在控制器内定义一次操作两次,则不会收到错误消息。