我正在练习我的Ruby on Rails,创建一个简单的应用程序,用户可以在其中注册(使用Devise)并发布文章。
安装Devise之后,我继续为文章生成一个脚手架
rails g scaffold article title:string article:text user_id:integer
然后我创建了Devise用户控制器
rails generate devise User
我的文章控制器:
class Article < ActiveRecord::Base
belongs_to :user
end
我的用户控制器:
class User < ActiveRecord::Base
has_many :articles
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
现在我的问题是:如何使http://localhost:3000/articles/new/中的user_id自动为current_user.id?
此外,在http://localhost:3000/articles/中,用户应该只能查看与其user_id相关联的文章,而不是任何人。我应该对文章控制器做些什么改动呢?
这是我第一次在Stack Overflow上发帖,感谢您的帮助..非常感谢!
编辑找到了第一个问题的解决方案,供将来参考。
我把
<%= f.hidden_field :user_id %>
在_form.html.erb和
中def create
@article.user_id = current_user.id
...
end
到我的文章控制器。这成功地将current_user.id作为文章的user_id完美传递。
答案 0 :(得分:4)
在ArticleController#new action中添加以下行:
@article = current_user.articles.build
至于你的指数行动:
@articles = current_user.articles
答案 1 :(得分:4)
现在我的问题是:如何使http://localhost:3000/articles/new/中的user_id自动为current_user.id?
你应该在这条线上添加articles_controller的“def new” @ ask.user_id = current_user.id
然后form_for @ask
要求user_id
的{{1}}属性并显示它。但我不建议在真实世界的应用程序中执行此操作,您可能会在`articles_controller
`此外,在http://localhost:3000/articles/中,用户应该只能查看与其user_id相关联的文章,而不是任何人。我应该对文章控制器做些什么改动呢?
在@ask
articles_controller
内,更改为def index
。请注意,您还应添加@articles = Article.where(user_id:current_user.id)
以确保before_filter :require_user
不为零。