我在我的MySQL數據庫中使用了一個TEXT列。正如文檔所述,不可能爲這些列設置默認值。使用Ruby on Rails爲TEXT列模擬默認值的最佳方法是什麼?
我目前使用下面的代碼來模擬這種行爲:
class Data
before_save lambda {text_column ||= ''}
end
有沒有更好的,更railis/active_record方式做到這一點?
我在我的MySQL數據庫中使用了一個TEXT列。正如文檔所述,不可能爲這些列設置默認值。使用Ruby on Rails爲TEXT列模擬默認值的最佳方法是什麼?
我目前使用下面的代碼來模擬這種行爲:
class Data
before_save lambda {text_column ||= ''}
end
有沒有更好的,更railis/active_record方式做到這一點?
如果您對HTML5解決方案感到滿意,您是否嘗試過:text_field上的placeholder屬性?
你也真的想將text_field(它捕獲少量的文本)填充到「文本」類型列嗎?你是不是指text_area?
如果你想要「默認值」實際存儲在數據庫中,如果用戶不輸入任何東西,那麼我建議如下。這是「工廠」模式。
與其說「新」在你的ActiveRecord模型類,你在你的模型
def self.setup(params = {})
new(params).tap do |v|
v.text_column = "default value"
# other defaultings
end
end
在你的控制器,而不是調用你呼叫建立的類新創建一個「設置」方法。
在遷移
add_column :table_name, :column_name, :string, :default => 'your text'
工作對我來說加入這個
他有一個文本列而不是一個字符串列! – 2011-05-11 08:34:01
這是MySQL和TEXT或BLOB列類型的組合,不接受默認值。在任何其他情況下,這將是我的首選方式。 – 2011-05-11 08:50:22
如果你有新的形式的文本字段,使用這個文本字段的默認值:
#views/controller/new.html.erb
<%= f.text_field :column_name, :value => "default value" %>
這是一個很好的可用性選擇,因爲用戶知道該列的默認值。
雖然不要在edit.html.erb
中使用它,因爲在這種情況下,無論數據庫中的原始值如何,此字段仍將具有默認值。
即使我在數據庫中有「別的東西」,這總是會顯示text_field的值爲「默認值」嗎? – 2011-05-11 08:46:08
@Aditya Sanghi - 是的,你是對的。此代碼應該用於創建新的新對象的視圖中。我會明確地在我的答案中。 – 2011-05-11 08:50:21
你的意思是你還沒有幹你的形式在部分? :) – 2011-05-11 09:16:02
你似乎確實採取了'text_field'的東西從以前的答案:-) 我實際上使用wysiwyg文本編輯器來允許編輯此字段。而這個文本編輯器實際上確實設置了一個空字符串。 – 2011-05-11 08:52:55
但我正在做這樣的事情,像我不使用窗體/視圖的這些對象的導入。 好的提示:佔位符和工廠模式!不過,他們似乎並不像Rails/ActiveRecord那麼多。所以我可能會留下來。 – 2011-05-11 09:01:52
@Simon,工廠模式非常強烈推薦Rails最佳實踐。使用工廠模式完全獨立於控制器或視圖,實際上它非常適合您的導入程序調用模型上的設置方法,並期望默認設置。你也可以考慮在模型中實現after_initialize方法。這會在每個新的(但也是每次查找後)被調用。還有active_record默認的相關插件。 http://ruby-toolbox.com/categories/activerecord_default_values.html – 2011-05-11 09:19:58