1

私は Rails に比較的慣れていないため、コントローラーとビューを正しくルーティング/構造化しているかどうかわかりません。

簡単に言えば、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

私のアプリ>資産> javascripts> 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を初めて使用するので、コードが正しくないか欠落している、ファイルの名前が正しくない、動作させるためにどこかに新しいファイルが必要なのか、それが正確に何であるかはわかりません。

必要なコードとアプリの構造に関して誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します.

4

2 に答える 2

1

アクションを使用する前にルートを宣言する必要があります...resources標準の安らかなルートのみを作成します。この場合、カスタムのルートを追加する必要があります。例 :

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

詳細については、ルーティングに関する Rails ガイドを参照してください。

補足として、アクションが1人のユーザーのみに関係する場合は、member代わりに使用しますcollection

于 2013-03-27T16:08:24.887 に答える
1

ルートを追加するuserprofile_pathには、次のようにします。

devise_for :users, :path_names => {:sign_in => 'login', :sign_out => 'logout'} do
   match '/profile', :to => 'users#userprofile', :as => 'userprofile'
end
于 2013-03-27T16:16:21.933 に答える