簡體   English   中英

序列化哈希允許任意鍵/值對

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM