簡體   English   中英

Rails:未定義的方法“id”為 nil:NilClass 錯誤

[英]Rails: Undefined method `id' for nil:NilClass error

我目前正在嘗試使用 RoR 制作網球網站。 這個網站有一個后端,目前在數據庫中有兩個表,用戶和事件。 我試圖在兩個表之間建立 has_many 關系,然后創建一個表單,讓用戶注冊這些不同的事件。 我非常接近,但在我看來,我一直遇到這個錯誤:

    undefined method `id' for nil:NilClass

   <%= link_to event.title, event %>
  | <%= link_to "delete", event, method: :delete %>

   <%= form_for(current_user.relationships.build(event_id: @user.id)) do |f| %>
   <div><%= f.hidden_field :event_id %></div>
     <%= f.submit "Sign up", class: "btn btn-large btn-primary" %>
   <% end %>

這是我的關系控制器

    class RelationshipsController < ApplicationController

      def create
       @relationship = Relationship.new(relationship_params)
       @user = User.find(params[:relationships][:event_id])
       current_user.follow!(@user)
       respond_to do |format|
       format.html { redirect_to @user }
       end
     end
    end

以及我的事件控制器的相關部分:

   def new
     @event = Event.new
   end

   private

   def event_params
     params.require(:event).permit(:title, :Venue, :Time, :Date)
   end

不知道如何解決這個錯誤,任何幫助將不勝感激。

您應該初始化@user 變量

def new
  @user = User.new
  @event = Event.new
end

在您的控制器新操作中,您必須定義@user 目前這個變量是空的。 所以如果你在不存在的東西上調用id方法,你會得到錯誤undefined method id for Nil...

例如像這樣:

def new
  @user = User.find(1)
  @event = Event.new
end

在處理Rails應用程序時,我遇到了類似的問題。 問題是我在控制器中調用了一個不必要的實例變量。

這是它

我在log_in @admin調用了一個不必要的@admin實例變量

會話/admins_controller.rb

def create
  user = User::Admin.find_by(email: params[:sessions_admin][:email].downcase)
  if user && user.authenticate(params[:sessions_admin][:password])
    log_in @admin
    format.html { redirect_to users_admin_url(user), notice: 'Admin was successfully logged in.' }
    format.json { render :show, status: :created, location: users_admin_url(user) }
  else
    format.html { render :new }
    format.json { render json: @admin.errors, status: :unprocessable_entity }
  end
end

但是錯誤消息在我包含在application_controller文件中的相應幫助文件中被 rails 標記。:

會話/admins_helper.rb

module Sessions::AdminsHelper

  # Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end
end

我只需要修改sessions/admins_controller.rb中的create 操作中的方法調用

log_in @admin

log_in user

就這樣。

我希望這有幫助

暫無
暫無

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

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