cdo*_*eli 9 ruby-on-rails devise
我正在练习我的Ruby on Rails,创建一个简单的应用程序,用户可以在其中注册(使用Devise)并发布文章.
在安装Devise之后,我继续为这些文章生成一个脚手架
rails g scaffold article title:string article:text user_id:integer
Run Code Online (Sandbox Code Playgroud)
然后我创建了Devise用户控制器
rails generate devise User
Run Code Online (Sandbox Code Playgroud)
我的文章控制器:
class Article < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我的用户控制器:
class User < ActiveRecord::Base
has_many :articles
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:如何使http:// localhost:3000/articles/new /中的user_id 自动为current_user.id?
此外,在http:// localhost:3000/articles /中,用户应该只能查看与其user_id相关联的文章,而不是任何人.我应该对文章控制器做些什么改动呢?
这是我第一次在Stack Overflow上发帖,你的帮助将不胜感激..谢谢你!
EDIT找到了第一个问题的解决方案,供将来参考.
我放
<%= f.hidden_field :user_id %>
Run Code Online (Sandbox Code Playgroud)
在_form.html.erb中,和
def create
@article.user_id = current_user.id
...
end
Run Code Online (Sandbox Code Playgroud)
到我的文章控制器.这成功地将current_user.id作为文章的user_id完美传递.
现在我的问题是:如何使http://localhost:3000/articles/new/中的 user_id自动成为 current_user.id?
您应该将这一行添加到articles_controller的“def new”中@ask.user_id = current_user.id
so 然后form_for @ask询问 的user_id属性@ask并显示它。但我不建议在现实世界的应用程序中执行此操作,您可能会在“articles_controller”的“def create”中处理此步骤
另外,在http://localhost:3000/articles/中,用户应该只能查看与其 user_id 关联的文章,而不能查看其他任何人的文章。为此,我应该对文章控制器进行哪些更改?
里面articles_controller的def index,改为@articles = Article.where(user_id:current_user.id)。请注意,您还应该添加 abefore_filter :require_user以确保它current_user不为零。
| 归档时间: |
|
| 查看次数: |
13695 次 |
| 最近记录: |