红宝石在轨道上的简单形式

时间:2018-11-27 22:46:13

标签: ruby-on-rails ruby nested

我只是对简单的形式和嵌套感到好奇。香港专业教育学院阅读过文件,但仍然不太明白。

我使用设备创建了一个网站,用户可以在其中发布推文,也可以编辑推文。 我的印象是,[@ user,@tweet]在新表单和编辑表单上都必须出现在simple_form_for中。但是我发现[@user,@tweet]需要在新表单上,只有[@tweet]需要在编辑表单上。它是否正确? 我还不清楚这是如何工作的。是否因为需要将新的tweet分配给用户,因此使用@user和@tweet来编辑tweet,所以不需要@user是因为不需要它吗? 道歉,如果这没有道理。

1 个答案:

答案 0 :(得分:1)

  

我不清楚它是如何工作的。是因为需要将新的tweet分配给用户,所以使用@user和@tweet,并且要编辑tweet,不需要@user是因为不需要它吗?

简短的回答是“是”。更长的答案是...

我不知道,但我猜测路线看起来像:

resources :user do 
  resources :tweets, shallow: true 
end

哪个会给你类似的东西:

    user_tweets GET    /users/:user_id/tweets(.:format)          tweets#index
                POST   /users/:user_id/tweets(.:format)          tweets#create
 new_user_tweet GET    /users/:user_id/tweets/new(.:format)      tweets#new
     edit_tweet GET    /tweets/:id/edit(.:format)                tweets#edit
          tweet GET    /tweets/:id(.:format)                     tweets#show
                PATCH  /tweets/:id(.:format)                     tweets#update
                PUT    /tweets/:id(.:format)                     tweets#update
                DELETE /tweets/:id(.:format)                     tweets#destroy
          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
                PATCH  /users/:id(.:format)                      users#update
                PUT    /users/:id(.:format)                      users#update
                DELETE /users/:id(.:format)                      users#destroy

因此,您可以看到对于tweets#edittweets#showtweets#updatetweets#destroy,不需要:user_id。这是由于shallow: true

您可以在guide中了解有关浅层嵌套的更多信息。