Ruby on rails ActiveRecord关联仅在控制台中工作
我有一个用户模型和一个ArtWorkeration模型。用户可以创建艺术作品 我的用户模型有很多迭代Ruby on rails ActiveRecord关联仅在控制台中工作,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个用户模型和一个ArtWorkeration模型。用户可以创建艺术作品 我的用户模型有很多迭代 class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :artwork_iterations end 但当我在登录时通过我的站点创
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :artwork_iterations
end
但当我在登录时通过我的站点创建artwork_迭代时,artwork_迭代.user为空
为了解决这个问题,我在表单中添加了一个隐藏字段:
<%= f.hidden_field :user_id, value: "#{current_user.id}" %>
但这似乎有点骇人听闻,而且非常不安全。(任何用户都可以检查元素并更改此值,让他们以其他用户的身份创建artwork\u迭代)。您可能知道答案,只是没有意识到而已。我们很可能需要查看您的控制器和路由,但是,在控制台中,您可以清楚地分配用户id。在你的网站上,你显然不是。如果在路线中已将artwork_迭代嵌套在user下,则控制器中必须有一个东西用于新建和创建,如果没有,则必须有另一个 如果嵌套,在artwork_iterations控制器的顶部,您需要执行以下操作:
before_action :get_user
然后在底部,您需要将其作为私有方法:
def get_user
@user = User.find(params[:user_id]) # (or current_user as you seem to have that helper)
end
这将传递localhost/user/1/artworkiterations/new页面的参数,以便用户与登录用户匹配。如果您有Desive或“current_user”方法,您可以在此处使用current_user
我将假设您已经嵌套了它,但是,无论哪种方式,您都必须在artwork_迭代控制器中实际声明新的用户并创建操作。以便:
def new
@artworkiteration = @user.artwork_iterations.build
end
像这样的东西可能对你有用。谢谢!最终为此使用Desive的当前_user.id。我目前正在艺术品_iterations.create之后设置id值
before_action :get_user
def get_user
@user = User.find(params[:user_id]) # (or current_user as you seem to have that helper)
end
def new
@artworkiteration = @user.artwork_iterations.build
end