所以我在http://railscasts.com/episodes/250-authentication-from-scratch使用了“从头开始验证”railscast中的逻辑,它似乎工作了,我可以在顶部找到“你登录为...”的消息页。
但是,如果我想做一些像提交帖子的日志这样的话,我会碰到一点墙。
我不想通过新帖子中的隐藏字段提交它,因为我猜这有安全问题。
我不想在http://ruby.railstutorial.org/ruby-on-rails-tutorial-book的rails教程中使用“属于”逻辑,因为虽然它在技术上可以在这里工作,但我将来可能需要记录谁创建了一个“属于”的条目“关系不存在。
我尝试做的是在我的帖子模型中创建一个“before save”函数调用,该函数调用指定了“created_by”值,但我猜模型无法访问根据身份验证railscast创建的current_user。 p>
所以现在我不知道怎么做这样的事情。
编辑:Ruby的新手,ERD的新手,所有这些,但我所说的属于关系不存在的是,如果有一个评级系统的帖子,每个评级都属于一个帖子。但我也想记录提交每个评级的人。答案 0 :(得分:7)
如果我很清楚您遇到的问题是您无法在模型中使用current_user
辅助方法查看哪个用户当前是loggen,您只需设置帖子的created_by
属性即可在Post
控制器之前保存它,如:
def create
@post = Post.new(params[:post])
@post.created_by = current_user.id
if @post.save
redirect_to whereyouwant_url, :notice => "Post successfully created"
else
render "new"
end
end
答案 1 :(得分:0)
好的,不确定存在哪些并发症,但这里有:
所以addind belongs_to
使帖子有一个名为user_id
的字段,它是用户id的外键。如果你添加了一个创建的,这将做同样的事情,除了你必须编程更新和derefreneces自己。我认为这可能是获得此功能的最佳方式,您只需稍后将其添加到没有它的部件中,但rails可以轻松实现。
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user, :as => :created_by
end
post.created_by
user.posts
会授予您访问该用户的权限,这相当于使用您所谈论的内容,除了rails会发挥其魔力并为您添加方法。
编辑:如果这对你不起作用,抱歉你的问题不清楚为什么你需要某些东西,但你总是可以很容易地添加属于关系,这就是我的建议。答案 2 :(得分:0)
(替代Aldo&#39; xoen&#39; Giambelluca回答)
我认为你应该使用松散扫描所解释的belongs_to
关系,但如果你真的不想要,请在你的User
课程中添加以下方法:
def new_post(params)
post = Post.new(params)
post.created_by = id
post
end
并在您的控制器中:
def create
@post = current_user.new_post(params[:post])
if @post.save
redirect_to @post, notice: 'Post successfully created'
else
render 'new'
end
end