我正在尝试做什么:
我试图找出是否有快速方法让country_select存储代表国家/地区的整数,而不是存储国家/地区名称/字符串本身。我正在使用country select gem。
可能的解决方案:
我认为可以做到这一点的一种方法是,如果我将gem作为插件安装并编辑countries数组,以使主数组中的数组具有整数和字符串,例如COUNTRIES = [[“United Kingdom”,1],[“United States”,2]]
这种方式在我的表单中会有代表字符串的值。然后我可以在我的个人资料表中有一个country_id列,其中将存储用户选择的国家/地区ID。我将有一个单独的表“国家”,其中将存储国家/地区,我将使用配置文件表的country_id来引用国家/地区表中的正确国家/地区。
这样做意味着我仍然可以获得gem /插件的优点,例如将优先级国家放在选择列表的顶部。我不知道该怎么做的事情。
这需要很长时间,但它可以工作。如果我选择这个解决方案,我会把插件放在哪里?我的apps目录中的供应商文件夹对吗?
但是,如果有更快的方法可以做到这一点,我想这样做。
更大的图片:
好的我有一个搜索表单,用户可以通过以下方式浏览用户筛选结果的网站:
文字输入的位置 性别 性欲 婚姻状况 国家
我正在使用思考sphinx,当过滤属性时,似乎需要将属性表示为整数,因为除了国家之外,一切都有效。
我正在使用country select gem,它似乎只存储字符串而不是表示字符串的整数。
我想让它存储整数。
以下是我在搜索表单中使用的一些内容:
module ApplicationHelper
GENDER = [["Select", nil],["Male", 1],["Female", 2]]
ETHNICITY = [["Select", nil],['Black', 1 ],['White / Caucasian', 2 ],['European', 3 ],['Asian', 4 ],
['Indian', 5 ],['Middle Eastern', 6 ],['Native American', 7 ],['Hispanic', 8 ],
['Mixed Race', 9 ],['Other Ethnicity', 10 ]]
MARITAL_STATUS = [[' Select', nil],['Single', 1 ],['Dating', 2 ],['In relationship', 3 ],['Married', 4 ],
['Living Together', 5 ],['Divorced', 6 ],['Separated', 7 ],['Widowed', 8 ]]
SEXUAL_PREFERENCE = [[' Select', nil],['Straight', 1 ],['Gay', 2 ],['Bi-sexual', 3 ]]
end
搜索/浏览表单
<%= form_tag browsers_path, :method => 'get' do %>
<p>
Location: <%= text_field_tag :location, params[:location] %>
<br />
Country: <%= country_select :country, [ "United Kingdom", "France", "Germany" ] %>
<br />
Gender: <%= select_tag :gender, options_for_select(ApplicationHelper::GENDER, params[:gender]) %>
<br />
Ethnicity: <%= select_tag :ethnicity, options_for_select(ApplicationHelper::ETHNICITY, params[:ethnicity]) %>
<br />
Marital status: <%= select_tag :marital_status, options_for_select(ApplicationHelper::MARITAL_STATUS, params[:marital_status]) %>
<br />
Sexual preference: <%= select_tag :sexual_preference, options_for_select(ApplicationHelper::SEXUAL_PREFERENCE, params[:sexual_preference]) %>
<br />
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
你可以看到每个数组都有一个字符串和一个整数。如果从country_select gem中检出数组,则只有字符串。
我很感激能够解释我正在尝试做的最佳方式以及一个明确的例子。
我希望这篇文章有道理。
亲切的问候
答案 0 :(得分:1)
我最终从wikipedia重新创建了国家/地区列表,名称为country,iso代码为value。更直接的是,我将国家作为他们的iso代码和整数存储,从而可以将这个属性用于思考sphinx。
答案 1 :(得分:0)
为其他过滤器创建常量。然后使用虚拟属性来翻译和设置值,以便您可以存储int版本而不是字符串。
编辑:
也许我不明白我们究竟在谈论什么,但如果你试图将价值存储在某个地方的某个模型中,你可以这样做:
def country_int(country_s)
country = COUNTRY[country_s]
end
def country_int
COUNTRY.key(country)
end