2010-06-10 94 views
1

給定模型時,如何生成輸入的id屬性?舉例來說,如果我有Personfirst_name屬性的模式,形式助手打印出與這個網站的文本框:使用ActiveRecord模型生成輸入ID

<input type="text" id="person_first_name" /> 

我怎麼能產生person_first_name從代碼中的其他一些地方(如在控制器或某個地方)?

回答

1

我最終跟隨了中微子的建議,並且看了一下軌道代碼。我最終在InstanceTag課中抽出了一些私人方法,並稍稍移動它們。我猴子修補這個到ActiveRecord::Base,這可能不是最好的解決方案,但它現在的工作原理:

def create_tag_id(method_name) 
    object_name = ActionController::RecordIdentifier.singular_class_name(self) 
    "#{sanitized_object_name(object_name)}_#{sanitized_method_name(method_name.to_s)}" 
end 

private 
    def sanitized_object_name(object_name) 
    object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "") 
    end 

    def sanitized_method_name(method_name) 
    method_name.sub(/\?$/,"") 
    end 
+0

我做了同樣的事情,但不是將這些方法放入模型中,而是替換並擴展了表單構建器:http://stackoverflow.com/questions/4819696/how-do-you-get-the-rails-generated- ID對的一外形元件換基準在-javascri/5432558#5432558 – ilpoldo 2011-03-25 12:46:18

1

一個好習慣是飄飛:)

這些值由nodoc-ED InstanceTag類內部的私有方法生成的挖掘軌代碼。你可以看到來源here。感興趣的方法是add_default_name_and_id,tag_id,並且可能是tag_id_with_index。那裏沒什麼特別的。

+0

是啊,我也四處InstanceTag捅了一段時間,但我還是太新,Ruby和Rails來真的掌握那裏的進展:)。我想我一直誤認爲沒有parens作爲屬性/屬性的方法。 – swilliams 2010-06-10 20:18:29