2017-05-28 54 views
0

我生成了一個請求模型,它包含一個地址和一個主體。該請求屬於用戶。當我嘗試將請求user_id設置爲current_user.id時,我以用戶身份登錄時得到了「nil:NilClass」的「未定義方法id」。Ruby on Rails設計不能獲取current_user_id

請求控制器:

class RequestsController < ApplicationController 
     def new 
     @request = Request.new 

     end 

     def show 
     @request = Request.find(params[:id]) 
     end 

     def create 
     @request = Request.new(request_params) 
     @request.user_id = @current_user.id 
     if @request.save 
      flash[:notice] = "Successfully created request!" 
      redirect_to request_path(@request) 
     else 
      flash[:alert] = "Not Saved" 
      render :new 
     end 
     end 


    private 
    def request_params 
    params.require(:request).permit(:address, :body) 
    end 
end 

新要求HTML:

<div class= "center"> 
    <h1> Create a Request</h1> 
</div> 

<div class= "row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= form_for @request do |f| %> 

    <div class="form-group"> 
     <%= f.label :address %> 
     <%= f.text_field :address%> 
    </div> 

    <div class="form-group"> 
     <%= f.label :body %> 
     <%= f.text_area :body %> 
    </div> 

    <div class= "center"><%= f.submit "Submit", class: 'btn btn-primary' %></div> 
    <% end %> 
    </div> 
</div> 

回答

4

你應該改變這一行

@request.user_id = @current_user.id 

對此

@request.user_id = current_user.id 

@符號用於創建實例變量。設計current user不是一個實例變量,而是一種方法,所以你不能以這種方式訪問​​它。如果你還沒有讀過它,你可以在這裏得到一整套有用的方法:https://github.com/plataformatec/devise。請記住,你完全按照它們的寫法來使用它。那麼,例如,user_signed_in?是不是@user_singed_in?或類似的東西。