2017-05-28 82 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?或类似的东西。