用户有一组单一的“偏好”。资源应该是单一的,因为用户只有一组他们应该知道的偏好。该名称应该是复数,因为该资源代表过多的设置。我现在遇到路由问题,我相信它源于此。
我已经宣布路线,
resource 'preferences', only: [:show, :edit, :update] do
resources :weight_based_rates
end
运行的输出rake routes
包含以下条目,
preferences_weight_based_rates GET /preferences/weight_based_rates(.:format) weight_based_rates#index
POST /preferences/weight_based_rates(.:format) weight_based_rates#create
new_preferences_weight_based_rate GET /preferences/weight_based_rates/new(.:format) weight_based_rates#new
edit_preferences_weight_based_rate GET /preferences/weight_based_rates/:id/edit(.:format) weight_based_rates#edit
preferences_weight_based_rate GET /preferences/weight_based_rates/:id(.:format) weight_based_rates#show
然后,在相关的部分中,我声明了这样的形式,
= form_for [@preference, WeightBasedRate.new], :remote => true do |f|
最后,我在 Preferences#show 中得到一个 `NoMethodError
undefined method `preference_weight_based_rates_path' for #<#<Class:0x0000000572d2b0>:0x000000057b4800>
请注意,这种未定义的方法涉及单数形式的“偏好”。
也许我背叛了某种程度的天真,但这并不是 Rails 的魔力第一次让我失望:rails 是基于对我的模型的奇异性的一些假设来构造一个奇异的名称吗?或者也许基于我正在传递一个实例的事实?那么导轨是否无法将这些部件组合在一起?我只是对 form_for 的论点安排得很差吗?
轨道是混乱的,还是我?