Rails:NoMethodError,如何显示用户个人资料?

时间:2015-05-27 05:17:57

标签: ruby-on-rails ruby ruby-on-rails-3

当我在顶部输入/users/1/users/2时,我得到同一页面,但有2个用户。它只是将我重定向回show.html.rb页面。我不确定,但也许我没有每个用户的页面。也许你可以查看我的代码。我无法显示<%= @user.name %>,我收到NoMethodError in Users#show。也许这就是问题...

show.html.rb

Avatar, <%= image_tag(current_user.avatar.url(:medium)) %>

Hello, <%= current_user.name %>

的routes.rb

Rails.application.routes.draw do

   resources :products


   get 'users/index'
   get 'users/show'

   devise_for :users do
       resources :posts 
   end

   get 'users/:id' => 'users#show', as: :user


   resources :posts do
     member do
         get "like", to: "posts#upvote"
         get "dislike", to: "posts#downvote"


     end
     resources :comments
   end

   root 'posts#index'

end

我有Show.html.rb中的每个用户和一个显示Index.html.rb所有用户的索引

users_controller.rb

class UsersController < ApplicationController
    before_action :authenticate_user!

    def index
        @users = User.all
    end

    def edit
        @user = User.create( user_params )
    end

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


 private

    def user_params
        params.require(:user).permit(:name, :email, :avatar)
    end

end

4 个答案:

答案 0 :(得分:2)

users_controller.rb

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

您正在尝试使用他的名字找到用户并且您正在传递ID。如上所述更改查询并检查并为show方法添加了两条路线,因此请删除第一条路线。

答案 1 :(得分:1)

你在user.if下有显示页面吗?不要意味着创建一个..我认为这可能也是一个问题

答案 2 :(得分:1)

您已为users/show展示页面创建了两条路线。删除get 'users/show'然后重试

答案 3 :(得分:1)

您在current_user页面中使用的是show,这就是您每次都能获得相同结果的原因。路线不是问题。您应该将控制器的操作更改为:

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

然后将您的观点更新为:

Avatar, <%= image_tag(@user.avatar.url(:medium)) %>
Hello, <%= @user.name %>