2013-03-27 26 views
1

我对Rails比较新,所以我不确定我是否正确地路由/构建了我的控制器和视图。在用户模型中使用jQuery呈现部分模型

简而言之,我只是试图使用user/show.html.erb页面中的标签来使用jQuery在其下面的内容区域中呈现部分内容。

然而,当我刷新页面,我的代码,我得到以下错误:

undefined local variable or method `userprofile_path' for #<#<Class:0x007f8c181e9ff0>:0x007f8c171662a0> 

我的应用程序>的意见>用户> show.html.erb:

<div id="profile-box"> 
<ul class="profile-tabs"> 
     <%= link_to "<li class=\"tab selected\">Current</li>".html_safe, userprofile_path, remote: true %> 
     <%= link_to "<li class=\"tab\">Offers</li>".html_safe, userprofile_path, remote: true %> 
     <%= link_to "<li class=\"tab\">Sales</li>".html_safe, userprofile_path, remote: true %> 
    </ul> 

<div id="profile-content"> 

</div> 
</div> 

我的应用程序>控制器> users_controller.rb:

class UsersController < ApplicationController 

def show 
    @user = User.find(params[:id]) 
end 

def userprofile 
    respond_to do |format| 
     format.js 
    end 
end 

end 

我的应用>资产>的JavaScript> userprofile.js:

$(function() { 
     $("li.tab").click(function(e) { 
      e.preventDefault(); 
      $("li.tab").removeClass("selected"); 
      $(this).addClass("selected"); 
      $("#profile-content").html("<%= escape_javascript(render partial: 
"users/offers")%>"); 
     }); 
    }); 

我也使用设计的,所以这里是我的routes.rb文件:

devise_for :admin_users, ActiveAdmin::Devise.config 

devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'} 

resources :users 

由于我是新来的Rails,我不知道如果有损坏或丢失,代码问题,文件没有正确命名,如果我需要一个新的文件来使它工作,或者它到底是什么。

如果任何人都可以根据我需要的代码和应用程​​序的结构指向正确的方向,我将不胜感激。

+0

什么你的路线是什么样子?你使用'资源:用户'吗? – 2013-03-27 15:51:33

+0

我刚刚更新了问题以包含我的路线文件。我也在使用Devise,导致这个问题呢? – Zephyr4434 2013-03-27 15:57:33

回答

1

您必须在使用动作之前声明路线...... resources只会创建标准的宁静路线,您必须在此情况下添加自定义路线。例如:

resources :users do 
    collection do 
    get :userprofile # it would create a helper like userprofile_users_path 
    end 
end 

请参阅the rails guides on routing了解更多信息。

作为一个侧面说明,如果你的行动只涉及一个用户,使用member代替collection

+0

我只想确保理解这个背后的理论:这是因为这些操作不是7个标准REST风格操作的一部分,因此必须手动路由? – Zephyr4434 2013-03-30 17:55:34

+0

是的,确切地说。资源为您的7个操作创建7条路线。对于其他操作,您必须手动声明路由。 – 2013-03-31 18:17:14

1

对于添加userprofile_path路线,这样做:

devise_for :users, :path_names => {:sign_in => 'login', :sign_out => 'logout'} do 
    match '/profile', :to => 'users#userprofile', :as => 'userprofile' 
end 
+0

所以这里的想法是手动将动作路由到用户控制器而不是Devise控制器? – Zephyr4434 2013-03-27 18:20:59

+0

是的,既然你已经声明'资源:用户',我不得不提供这个。首先,我使用Devise自身的RegistrationController进行操作。像魅力一样工作。 – kiddorails 2013-03-27 18:22:59