我在这里工作的是一个简单的应用程序,需要设置页面,因为我是Rails的新手,我在这里有点迷路了。我想在数据库中设置它,其中一列作为键,一列作为值。我已经在这里进行了一些设置,但是在获取表单以更新设置时遇到了麻烦。
我要做的就是拥有一个设置页面,其中可以更改多个设置。目前,所有设置都将是文本字段。在我当前的代码中,我收到错误“#的未定义方法`to_key'”。所以这是一些代码:
型号:setting.rb
class Setting < ActiveRecord::Base
def self.method_missing(method_name, *args, &block)
if method_name[-1] == '='
handle_set_setting method_name.to_s.delete("="), args.first
else
handle_get_setting method_name
end
end
private
def self.handle_get_setting(name)
if setting = Setting.find_by(key: name.to_s)
setting.value unless setting.value.empty?
else
nil
end
end
def self.handle_set_setting(name, value)
if setting = Setting.find_or_create_by(key: name.to_s)
setting if setting.update(value: value.to_s)
end
end
end
这是我的settings_controller.rb(我100%肯定我在这里没有太多正确的地方。)
class SettingsController < ApplicationController
before_action :set_settings, only: [:edit, :update, :show]
def index
@settings = Setting.all
end
def new
@settings = Setting.new
end
def update
@settings.update(params)
end
private
def params
params.require(:key).permit(:value, :etc)
end
def set_settings
@settings = Setting.find params[:key]
end
end
这是我的index.html.erb(很确定这是完全错误的)
<h2> Settings </h2>
<h3> Movie Settings </h3>
<%= form_for(@settings) do |f| %>
<%= f.hidden :key => "cp_api" %>
<%= f.label :value %><br>
<%= f.text_field :value %>
<%= f.submit %>
<% end %>
这是错误日志:
Started GET "/settings" for ::1 at 2015-09-18 00:57:24 -0400
Processing by SettingsController#index as HTML
Setting Load (0.1ms) SELECT "settings".* FROM "settings"
Rendered settings/index.html.erb within layouts/application (3.6ms)
Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.1ms)
ActionView::Template::Error (undefined method `to_key' for # <Setting::ActiveRecord_Relation:0x007fa186b88128>):
1: <h2> Settings </h2>
2:
3: <h3> Settings </h3>
4: <%= form_for(@settings) do |f| %>
5: <%= f.hidden :key => "cp_api" %>
6: <%= f.label :value %><br>
7: <%= f.text_field :value %>
app/views/settings/index.html.erb:4:in `_app_views_settings_index_html_erb__4580226212883122031_70165864193720'
我确定确实很容易发现问题,但是我在这里真的很迷茫,我已经为这个问题ing了两天了,但我似乎无法解决。
谢谢!
您需要像下面这样添加@setting = Setting.New
到您的index
方法中
def index
@settings = Setting.all
@setting = Setting.new
end
并更改<%= form_for(@settings) do |f| %
>到<%= form_for(@setting) do |f| %>
另外您需要将params
方法更改为以下
def params
params.require(:setting).permit(:value, :key)
end
并更改<%= f.hidden :key => "cp_api" %>
为<%= f.hidden_field :key => "cp_api" %>
以避免进一步的问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句