[英]Serialized Hash to allow arbitrary key/value pairs
我有一個模型,其中包含一個屬性,該屬性是“設置”的序列化哈希值。
這些設置通常是空的,這就是為什么我不創建has_many關聯的原因,但是在某些情況下,用戶將需要填寫它們。它應該接受任意數量的鍵/值對,例如:
object.settings = { first_setting: 'My setting', second_setting: 'Something else' }
設置的數量以及它們的值和名稱是不確定的。 完全取決於用戶。
理想情況下,我希望使用nested_form的link_to_add功能,該功能允許您為新設置添加一行文本字段,為設置名稱添加一個文本字段,為值添加一個文本字段。
除了我的模型中的“ serialize:settings,Hash”之外,我幾乎什么也沒有。
任何幫助深表感謝
好的,這是我嘗試過的,並且運行良好。
用戶模型-models / user.rb
class User < ActiveRecord::Base
serialize :settings
attr_accessible :email, :settings_attributes
def settings_attributes=(attributes)
self.settings = attributes
end
end
用戶控制器-controllers / users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to users_path
else
render :new
end
end
end
用戶編輯頁面-views / users / edit.html.erb
<h1>Users#edit</h1>
<%= form_for @user do |f| %>
<%= f.fields_for :settings_attributes, OpenStruct.new(@user.settings) do |builder| %>
<% @user.settings.keys.each do |key| %>
<%= builder.text_field key.to_sym %><br />
<% end %>
<% end %>
<%= f.submit %>
<% end %>
在更新用戶時,控制器會在params哈希中接收一個名為settings_attributes
的密鑰。 通過在用戶模型中定義設置器,我們可以編輯序列化settings
屬性。
在視圖中,我們只是循環遍歷settings
哈希中的所有keys
並顯示一個textfield
。 您可能需要顯示其他內容,例如textarea
甚至select
。 這將需要自定義settings
散列要想知道什么是要顯示(你可以存儲一個名為鍵設置類型type
中保持設定的類型和密鑰的哈希value
,其持有的名字那個設定)
關於add_new_link
功能,您可能需要看一下railscast http://railscasts.com/episodes/196-nested-model-form-revised
我從頭開始解雇了一個Rails應用程序,並且運行良好。 如果您有任何疑問,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.