【发布时间】:2016-07-01 15:22:58
【问题描述】:
我正在尝试允许用户使用ledermann-rails-settings 的表单从默认设置更新首选项。我得到了基于this answer 构建的表单,但是当我尝试提交表单以更新设置时,我收到一个我认为与嵌套资源有关的路由错误,但我是 RoR 的新手,所以我不确定. SO 上关于此的其他问题似乎使用 Rails 3 或以前版本的 gem。我正在使用 Rails 4.2.1。
routes.rb:
resources :users do
resources :settings
end
耙路线:
user_settings GET /users/:user_id/settings(.:format) settings#index
POST /users/:user_id/settings(.:format) settings#create
new_user_setting GET /users/:user_id/settings/new(.:format) settings#new
edit_user_setting GET /users/:user_id/settings/:id/edit(.:format) settings#edit
user_setting GET /users/:user_id/settings/:id(.:format) settings#show
PATCH /users/:user_id/settings/:id(.:format) settings#update
PUT /users/:user_id/settings/:id(.:format) settings#update
DELETE /users/:user_id/settings/:id(.:format) settings#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
形式:
<%= form_for(:settings) do |form| %>
<h3>Dashboard settings</h3>
<%= form.fields_for :dashboard, current_user.settings(:dashboard) do |f| %>
<%= f.label :theme_light, 'Light (Default)' %>
<%= f.radio_button :theme, "themes/flatly" %>
<%= f.label :theme_dark, 'Dark' %>
<%= f.radio_button :theme, "themes/darkly" %>
<% end %>
<%= form.submit "Save" %>
<% end %>
设置控制器:
class SettingsController < ApplicationController
def update
if params[:settings]
params[:settings].each do |key, value|
current_user.settings(key.to_sym).update_attributes! value
end
flash[:success] = "Settings updated!"
redirect_to root_path
else
render 'edit'
end
end
end
用户.rb:
has_settings do |s|
s.key :dashboard, :defaults => { :theme => 'themes/flatly' }
end
现在按原样提交表单会出现以下路由错误:
在 2016 年 7 月 1 日 15:12:36 +0000 为 72.231.138.82 开始 POST "/users/1/settings/1/edit" ActionController::RoutingError (没有路由匹配 [POST] "/users/1/settings/1/edit")
我想我理解嵌套资源表单的 Rails 指南意味着表单的第一行应该类似于
<%= form_for([@user, @settings]) do |form| %>
但改变会导致错误
表单中的第一个参数不能包含 nil 或为空
此外,ledermann-rails-settings 似乎没有调用所有设置的方法(至少就我目前版本的 gem 而言),所以我不确定我会怎么做定义@settings。
我尝试在表单中指定不同的路径,但没有成功,还尝试了资源:设置和资源:routes.rb 中的设置。我觉得我在控制器或路由级别缺少一些东西,但我没有足够的经验知道在哪里,并且 gem 文档和问题在表单上没有太多内容。
【问题讨论】:
标签: ruby-on-rails forms rubygems settings