Ruby on rails Ruby/Rails:如何插入post\u id和user\u id?
我读了这本书,它对第一步很有帮助,现在我在第二步。我需要控制器和表单方面的帮助 假设这是我的模型:Ruby on rails Ruby/Rails:如何插入post\u id和user\u id?,ruby-on-rails,syntax,comments,belongs-to,posts,Ruby On Rails,Syntax,Comments,Belongs To,Posts,我读了这本书,它对第一步很有帮助,现在我在第二步。我需要控制器和表单方面的帮助 假设这是我的模型: User has_many :posts has_many :comments Post belongs_to :user has_many :comments Comment belongs_to :user belongs_to :post 这些是我的桌子: User id Post id user_id Comment id user_id post_id
User
has_many :posts
has_many :comments
Post
belongs_to :user
has_many :comments
Comment
belongs_to :user
belongs_to :post
这些是我的桌子:
User
id
Post
id
user_id
Comment
id
user_id
post_id
在初始帖子中,通过将以下内容添加到控制器中的“创建”部分,用户ID将自动与内容一起添加:
@post=当前用户.post.build(参数[:post])
如果评论同时属于用户和帖子,如何使其自动添加帖子id和用户id?目前,我似乎只能通过以下操作使其插入用户id:
当前用户.comments.build(参数[:comment])
我不熟悉rails。我不认为最好的方法是让字段可以访问,并在表单中添加一个隐藏字段,难道没有其他方法吗
以下是我更新的路线:
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
sessions POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
session DELETE /sessions/:id(.:format) sessions#destroy
Post_comments GET /posts/:Post_id/comments(.:format) comments#index
POST /posts/:Post_id/comments(.:format) comments#create
new_Post_Comment GET /posts/:Post_id/comments/new(.:format) comments#new
edit_Post_Comment GET /posts/:Post_id/comments/:id/edit(.:format) comments#edit
Post_Comment GET /posts/:Post_id/comments/:id(.:format) comments#show
PUT /posts/:Post_id/comments/:id(.:format) comments#update
DELETE /posts/:Post_id/comments/:id(.:format) comments#destroy
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_Post GET /posts/new(.:format) posts#new
edit_Post GET /posts/:id/edit(.:format) posts#edit
Post GET /posts/:id(.:format) posts#show
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
root / static_pages#home
signup /signup(.:format) users#new
signin /signin(.:format) sessions#new
signout DELETE /signout(.:format) sessions#destroy
start /start(.:format) posts#new
我发现最好的评论方式是Ryan Bates在railscasts上介绍的 如果您正在执行
Post.comments.build
如果您正在执行当前用户.comments.build
操作,则需要在路由中执行此操作
resources :user do
resources :comments
end
您可以向构建方法发送属性:
current\u user.comments.build(params[:comment],post\u id:params[:id])
假设params[:id]
包含post id(我猜您在这里使用的是这部分代码/posts/[:id]/comments/new
)哦,我看到了那一集,但它似乎与这种情况无关,因为它不涉及其他型号。我可能需要更多地了解我需要在控制器中放置的内容,而不是在模型中。您可以始终向控制器添加更多属性,如current_user.comments.build(params[:comment],post_id:params[:id])
或post.comments.build(params[:comment],post_id:params[:id)
根据您的路线的外观,我在上面发布了我的路线,需要在那里更改什么,因为这种方式效果不太好。不,它为posts路线添加了功能,所以您的常规post路线将是相同的,您只需获得额外的/post/:id/comments/:comment\u id之类的内容。是的,它现在正在尝试查找/comme在发布回复后发送nts路由。
resources :post do
resources :comments
end
resources :user do
resources :comments
end