我有一个用户模型和一个ArtworkIteration模型。用户可以创建ArtworkIterations。ActiveRecord协会只在控制台工作
我的用户模型有很多artwork_iterations
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :artwork_iterations
end
而且我artwork_iterations belongs_to的用户
class ArtworkIteration < ActiveRecord::Base
belongs_to :user
end
这里的它增加了USER_ID外键我artwork_iteration模型迁移
class AddUserIdToArtworkIterations < ActiveRecord::Migration
def change
add_column :artwork_iterations, :user_id, :integer
add_index :artwork_iterations, :user_id
end
end
当我在rails控制台中创建一个artwork_iteration时,它的作用是:
> @art = ArtworkIteration.create(user_id: User.last.id)
> @art.user
# Successfully returns the last user
但是当我通过我的网站创建一个artwork_iteration登录时,artwork_iteration.user为null。
为了解决这个问题我已经添加了一个隐藏字段我的表格:
<%= f.hidden_field :user_id, value: "#{current_user.id}" %>
但这似乎哈克,是非常不安全的。 (任何用户都可以检查元素并更改此值,使他们可以以不同用户的身份创建artwork_iterations)。
谢谢!为此,使用devise的current_user.id结束。我目前在artwork_iterations.create后面设置了id值 – 2014-10-30 06:47:57