在Users模型中使用jQuery渲染部分

时间:2013-03-27 15:40:19

标签: jquery ruby-on-rails ruby ajax

我对Rails相对较新,所以我不确定我是否正确地路由/构造我的控制器和视图。

简单地说,我只是尝试在user / show.html.erb页面中使用制表符,使用jQuery在其下方的内容区域中呈现部分内容。

但是,当我使用我的代码刷新页面时,出现以下错误:

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

我的应用&gt;观看&gt;用户&gt; 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>

我的应用&gt;控制器&gt; 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

我的应用&gt;资产&gt; javascripts&gt; 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")%>");
        });
    });

我也在使用Devise,所以这是我的routes.rb文件:

devise_for :admin_users, ActiveAdmin::Devise.config

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

resources :users

由于我是Rails的新手,我不确定它是否存在代码错误或丢失,文件未正确命名的问题,如果我需要一个新文件来使其工作,或者究竟是什么。< / p>

如果有人能够根据我需要的代码和应用程​​序的结构指出正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:1)

您必须在使用操作之前声明路由... resources仅创建标准的restful路由,在这种情况下您必须添加自定义路由。示例:

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

答案 1 :(得分:1)

要添加userprofile_path路线,请执行以下操作:

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