2016-03-26 12 views
0

Eğiticiyi takip ediyorum: https://www.youtube.com/watch?v=7-1HCWbu7iU Zaten Pvistone klon kullanarak devise gem kullanarak ve herhangi bir sorun vardı. Current_user bağlantı denetleyicisine eklemeye çalıştığımda, "undefined method current_user" alırım. Her şeyi denedim ... hatta uygulamayı sıfırdan, current_user öğesini tanımlayarak ve veritabanını sıfırlayarak bile. Gem, yöntemi otomatik olarak ele almalı galiba, değil mi?devise gem kullanırken current_user undefined yöntemini al - Ruby on Rails 4.1.5

class LinksController < ApplicationController 
    before_action :set_link, only: [:show, :edit, :update, :destroy] 

    def index 
    @links = Link.all 
    end 

    def show 
    end 

    def new 
    @link = Link.current_user.links.build 
    end 

    def edit 
    end 

    def create 
    @link = current_user.build(link_params) 

    respond_to do |format| 
     if @link.save 
     format.html { redirect_to @link, notice: 'Link was  successfully created.' } 
     format.json { render :show, status: :created, location: @link } 
     else 
     format.html { render :new } 
     format.json { render json: @link.errors, status: :unprocessable_entity } 
     end 
    end 
    end 


    def update 
    respond_to do |format| 
     if @link.update(link_params) 
     format.html { redirect_to @link, notice: 'Link was successfully updated.' } 
     format.json { render :show, status: :ok, location: @link } 
     else 
     format.html { render :edit } 
     format.json { render json: @link.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
     @link.destroy 
     respond_to do |format| 
     format.html { redirect_to links_url, notice: 'Link was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 

    def set_link 
     @link = Link.find(params[:id]) 
    end 

    def link_params 
     params.require(:link).permit(:title, :url) 
    end 
    end 

Benim modeller:

class Link < ActiveRecord::Base 
    belongs_to :user 
end 

Benim modelleri link.rb: user.rb

İşte
1. Generate new app - rails new raddit 
2. Generate scaffold: rails g scaffold link title:string url:string 
3. rake db:migrate 
4. add gem 'devise', '~> 3.3.0' to gem file and run bundle install 
5. run rails g devise:install 
6. add file to development.rb - config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } 
7. add alerts to layout/application.html (as per devise documentation) 
8. generate view file - rails g devise:views 
9. generate user - rails g devise User 
10. rake db:migrate 
11. rails s 
12. go to localhost:3000/users/sign_up (works ok) 
13. Add relation to models: user.rb - has_many :links ; link.rb - belongs_to :user 
14. Create migration: rails generate migration add_user_id_to_links user_id:integer:index 
15. rake db:migrate 
16. go to rails console and save assocation between user and links. 
17. Add current_user to links controller - Getting undefined 'curren_user method' once I go to localhost:3000/links/new 

benim kodudur: Burada

benim adımlardır
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 :links 
end 

cevap

3

Link.current_user öğesini çağırdığınız yeni eylemde 'current_user' tanımlanmamış yöntemi alıyorsunuz.

def new 
    @link = Link.current_user.links.build 
end 

def new 
    @link = current_user.links.build 
end 

Bağlantı, örnein yöntemi yoktur olmalı, yani sorundur. current_user denetleyici bağlamında tanımlanır ve oluşturma eyleminde olduğu gibi kullanılmalıdır. Daha sorun varsa sadece yeni eylem exit yazıp konsolda örnein kontrol daha

0

yeni eylem

yılında

@link = current_user.links.build

olmalıdır .. Konsoldan hatalar alabilirsiniz .. bu yüzden her zaman önce konsolunuzu kontrol edin.

kullanım better_errors mücevher .. Özellikle hata hakkında daha fazla bilgi için

+0

Ah ateş ... evet, bu sorunun kök oldu. Ben lol gerçekleştirmeden kendim tamir ettim. Ama şimdi sen ne tamir ettiğini anlattın. Daha uyanık olmalıyım. –

+0

Yoo .. olmalısın – Vishal