我有一个 Rails 应用程序,有两个单独的数据库表、用户和产品。一个用户拥有_许多产品,而一个产品属于_一个用户。
当我创建一个产品时,我希望它自动将 user_id 添加到 products 表中的 user_id 数据库列中。我需要对我的 mvc 进行哪些更改以确保在创建新产品时添加正确的 user_id?
我有一个 Rails 应用程序,有两个单独的数据库表、用户和产品。一个用户拥有_许多产品,而一个产品属于_一个用户。
当我创建一个产品时,我希望它自动将 user_id 添加到 products 表中的 user_id 数据库列中。我需要对我的 mvc 进行哪些更改以确保在创建新产品时添加正确的 user_id?
您可以通过用户来确定新产品的创建范围。
例如,而不是这个:
Product.create(params[:product])
你来做这件事:
current_user.products.create(params[:product])
其中“current_user”是创建产品的用户。
作为一个建议,您可能希望返回并接受您之前一些问题的答案,这将提高您的回复率并增加将来有人回答您的问题的可能性。
有几种方法可以做到这一点,一种方法:
创建当前用户函数
class ApplicationController < ActionController::Base
private
# Finds the User with the ID stored in the session with the key
# :current_user_id This is a common way to handle user login in
# a Rails application; logging in sets the session value and
# logging out removes it.
def current_user
@_current_user ||= session[:current_user_id] &&
User.find_by_id(session[:current_user_id])
end
end
http://guides.rubyonrails.org/action_controller_overview.html#session
确保意识到安全问题。像 Devise 这样的宝石也可以提供帮助。
添加到产品控制器
class ProductsController < ApplicationController
def create
current_user.products.create! params[:product] # make sure attr_accessible is setup on products
end
end