2

all_usersページにアカウントを持つすべてのユーザーのリストを表示させようとすると、各リストアイテムはそのユーザーのプロファイルページへのリンクになります。ユーザー名を正しくレンダリングするページがありますが、ユーザーページを指していません。それらのユーザーページは/user/ usernameである必要がありますが、リンクは/ usernameを指しているため、明らかにエラーが発生します。私は本当に、本当に、本当に助けに感謝します。StackOverflowは本当に素晴らしいものです。

モデル:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
     attr_accessible :email, :password, :password_confirmation, :remember_me, :username
     has_many :items

  validates_presence_of :username
  validates_uniqueness_of :username

  def to_param
    username
  end

end

コントローラ:

class UsersController < ApplicationController
  def show
    @user = User.find_by_username(params[:id])
  end
  def index
@user = User.find(:all)
  end
end

All_Usersビュー:

<div class="well">
  <h1>All users</h1>

  <% @user.each do |user| %>
    <%= link_to user.username, public_profile_path(user.username) %><br/>
  <% end %>
</div>

ルート:

Scratch::Application.routes.draw do

  resources :items

  devise_for :users
  match 'users/:id' => 'users#show'
  match '/users', :to => 'users#index', :as => "all_users", :via => "get"
  match ':username' => 'users#show', via: :get, as: :public_profile

  root :to => 'static_pages#home'
  get "about" => "static_pages#about"
end
4

2 に答える 2

1

私は新しいコントローラーを作る傾向があるので、デバイスを上書きしてしまうことはありません。

Admin :: Usersのようなもので、そこで基本的なスキャフォールドを実行し、そのコントローラーの変数をDeviseユーザーモデルにマップします。

そうすれば、フロントエンドで使用するためのデバイスビューとバックエンドで使用するための管理ビューのスタイルを変更できます。

于 2013-02-24T23:51:16.020 に答える
1
match '/username/:name' => 'users#show', via: :get, as: :public_profile
于 2013-02-24T23:39:10.090 に答える