Я создал приложение с простой аутентификацией входа, это на самом деле твитер-клон. Пользователь регистрируется и получает доступ к страницам и т. Д.RoR - NoMethodError, undefined method
Но когда пользователь публикует что-то из этого профиля. Это дает ошибку
NoMethodError in RibbitsController#create
undefined method `id=' for nil:NilClass
Ошибка вокруг линии 5:
class RibbitsController < ApplicationController
def create
@ribbit = Ribbit.create(user_ribbits)
@ribbit.userid = current_user.id
if @ribbit.save
redirect_to current_user
else
flash[:error] = "Problem!"
redirect_to current_user
end
end
private
def user_ribbits
params.require(:ribbit).permit(:content, :userid)
end
end
Запрос дано приложение:
Request
Параметры:
{"utf8"=>"✓",
"authenticity_token"=>"dwVmjDNO4GOowphGFgChMDBxBfvka+M/xSUHvJMECzwxtv4NF6OuWtiaX74NLz91OwQJ9T9+wm7yMiPQ0BLpGA==",
"ribbit"=>{"content"=>"hi. test.\r\n"},
"commit"=>"Ribbit!"}
сессий контроллер :
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_username(params[:username])
if user && user.authenticate(params[:password])
session[:userid] = user.id
redirect_to rooturl, notice: "Logged in!"
else
flash[:error] = "Wrong Username or Password."
redirect_to root_url
end
end
def destroy
session[:userid] = nil
redirect_to root_url, notice: "Logged out."
end
end
пользователям контроллер:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to @user, notice: "Thank you for signing up!"
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@ribbit = Ribbit.new
end
private
def user_params
params.require(:user).permit(:name, :username, :email, :password, :password_confirmation, :avatar_url)
end
end
И применение контроллера
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
Я был бы очень признателен, если бы вы, ребята бы помочь!
Спасибо.
Вы уверены, что ваш «Ribbit» является существом, спасенным? –
не уверен, что это причина, но вы используете как ': userid', так и': user_id'. вероятно, захотите придерживаться 'user_id', потому что традиционно использовать это имя внешнего ключа – lobanovadik
попробуйте разместить отладчик в действии' create' 'RibbitsContoller' и посмотреть, получаете ли вы' current_user' – Deep