Im работает над простым приложением здесь, которому нужна страница настроек, так как я новичок в рельсах. Я немного потерялся здесь. Я хотел бы настроить его в базе данных с одним столбцом как ключом и одним столбцом в качестве значения. У меня уже есть несколько настроек, но у меня возникают проблемы с получением форм для обновления настроек.Rails update ActiveRecord из формы
Все, что я хочу сделать, это создать одну страницу настроек с несколькими настройками, которые можно изменить в ней. теперь все настройки будут текстовыми полями. С моим текущим кодом im получает ошибку «неопределенный метод` 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 (. Im 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'
Я уверен, что что-то действительно легко понять, но я просто потерялся здесь, я бил головой в течение 2 дней по этой проблеме, и я просто не могу понять это.
Спасибо!
На какой строке вы получаете эту ошибку? Можете ли вы опубликовать журнал ошибок в вопросе? – Pavan
Попробуйте изменить 'params.require (: key) .permit (: value,: etc)' to 'params.require (: setting) .permit (: value,: etc)' –
@Pavan добавил журнал ошибок, ошибка в строке 4 index.html.erb – djbartos93