У меня есть 1:N
взаимосвязь между user
и post
модель. Я хочу получить user_id
в модели post
. Я попробовал это, обратившись к current_user
, но это метать не может найти переменную current_user
.Как получить доступ к переменной current_user в контроллере или модели?
Мой класс userModel:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :validatable
has_many :post
validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
end
MyPostModel класс:
class Post < ActiveRecord::Base
belongs_to :user
before_create :fill_data
validates_presence_of :name, :message => 'Name field cannot be empty..'
def fill_data
self.is_delete = false
self.user_id = current_user # here I am getting the error
end
end
MyPostController класс
class PostController < ApplicationController
before_action :authenticate_user!
def index
@post = Post.all
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to action: 'index'
else
render 'new'
end
end
.....
private
def post_params
params.require(:post).permit(:name,:user_id,:is_delete)
end
end
я могу получить доступ к before_action :authenticate_user!
в Post контроллер, но не current_user
в post model
или controller
. Что я делаю неправильно здесь, в Post.fill_data. self.user_id
?
Остальная часть кода работает нормально, и я вижу новую запись :name and :is_delete
в базе данных sqlite3 (когда я комментирую строку self.user_id в классе Post).
Edit-1
У меня уже есть класс миграции для post
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :name
t.boolean :is_delete
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
end
'current_user.posts.build (posts_params)' – max
Да, это тоже правильно. но см. разницу между сборкой и новым/созданием. – SSR
Если вы нашли мой ответ полезным, вы можете его принять. – SSR