簡體   English   中英

Rails 4錯誤:NoMethodError /未定義的方法

[英]Rails 4 Error: NoMethodError / undefined method


嘿,
我對Rails相當陌生,並且設法為我的Items(Tools)和Users創建了一個Favorite控制器,該控制器工作得很好。
現在,我試圖在該用戶模塊中執行相同的操作。 因此,用戶能夠收藏其他用戶。

我玩了一下,想到了這個:

訪問/ users / index視圖時,我在瀏覽器中收到此錯誤:

NoMethodError in Users#index
undefined method `favorite_user_path' for #<#<Class:0x8ca77b8>:0x8ca50b8>

這是我的代碼:

app / models / favorite_user.rb

class FavoriteUser < ActiveRecord::Base
    belongs_to :c_user_id
    belongs_to :user_id
end

app / models / user.rb

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:

  # :confirmable, :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable


  has_many :tools

  # Favorite tools of user
  has_many :favorite_tools # just the 'relationships'
  has_many :favorites, through: :favorite_tools, source: :tool # the actual tools the user favorites

  # Favorite users of user
  has_many :favorite_users # just the 'relationships'
  has_many :userfavorites, through: :favorite_users, source: :user # the actual users the user favorites
  has_many :userfavorited_by, through: :favourite_users, source: :user # the actual users favoriting a user



  mount_uploader :avatar_filename, AvatarUploader

end

app / controllers / users_controller.rb

class UsersController < ApplicationController
    before_action :find_user, only: [:show, :favorite]

    # Add and remove favorite recipes
    # for current_user
    def userfavorite
      type = params[:type]
      if type == "favorite"
        current_user.userfavorites << @user

      elsif type == "unfavorite"
        current_user.userfavorites.delete(@user)

      else
        # Type missing, nothing happens
        redirect_to :back, notice: 'Nothing happened.'
      end
    end

    def index
        @users = User.all
    end

    def show
        @tools = Tool.where(user_id: @user).order("created_at DESC")
        @tool = Tool.find(1)
    end

    private

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

app / views / users / index.html.haml

- @users.each do |user|
    = image_tag gravatar_for user if user.use_gravatar == true
    = image_tag user.avatar_filename.url if user.use_gravatar == false
    %h2= link_to user.username, user
    %p= link_to "Favorite", favorite_user_path(user, type: "favorite"), method: :get
    %p= link_to "Unfavorite", favorite_user_path(user, type: "unfavorite"), method: :get

app / config / routes.rb

resources :users, only: [:index, :show, :userfavorite] do 
    get :userfavorite, on: :member
end

我希望所提供的數據足夠,否則請告訴我。 感謝您的所有答復。

您尚未在路由文件中聲明任何此類路徑。 根據您的路線文件,您可以使用命名路徑,例如

userfavorite_user_path(user_id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM