如何解决让个人资料有很多网站,而没有将网站变成自己的资源
| 我想让一个配置文件具有许多网站(仅作为URL字符串),并让用户将网站填写到不同的文本字段中。但是,我希望这是配置文件资源的属性,而不是它自己的资源。我该如何设置?如何访问个人资料视图中的网站字符串?解决方法
如果您不需要搜索这些URL字符串,请查看序列化。
http://api.rubyonrails.org/classes/ActiveRecord/Base.html
序列化使您可以在一个字符串中存储多个URL。但是,如果您希望能够搜索这些URL,建议您使用带有with1 with和
url
字段的简单Website
表。
祝好运!
,约定优于配置,因此您在这里遇到了麻烦。
对于数据库,将其存储为逗号分隔的字符串,例如“ 3”。
class User
attr_accessor :website_one
attr_accessor :website_two
attr_accessor :webstie_three
before_save :parse_websites
def prase_websites
w1 = self.website_one ||= \"\"
w2 = self.website_two ||= \"\"
w3 = self.website_three ||= \"\"
self.websites = \"#{w1},#{w2},#{w3} \"
end
def websites
self.websites_string.split(/[\\s,]+/)
end
end
然后,在视图中,您将需要编写自己的方法以具有不同的text_fields
。
<%= @form_for(user) do |f| %>
<p><%= f.text_field :website_one %></p>
<p><%= f.text_field :website_two %></p>
<p><%= f.text_field :webstie_three %></p>
<% end %>
而且,如果您想拥有更多网站,则应考虑元编程。真的干了。但是,linkedin,SO,Twitter等网站通常没有无限的网址。
,为模型添加新方法
class Profile < ActiveRecord::Base
def web_sites_hash
result = {}
arr = web_sites.squish.split(\' \') << \"\"
arr.each_index {|i| result[\"web_site_#{i}\"] = arr[i]}
result
end
end
更改视图。代替这个:
<%= f.label :web_sites %><br />
<%= f.text_area :web_sites %>
尝试这个:
<%= f.label :web_sites %><br />
<% @profile.web_sites_hash.each_pair do |virt_field_name,virt_field_value| %>
<%= f.text_field virt_field_name,:value => virt_field_value %><br />
<% end %>
将此控制器添加到控制器中(例如,执行'\'update \'操作)
def update
@profile = Profile.find(params[:id])
web_sites = []
params[:profile].each_key do |prm_name|
web_sites << params[:profile].delete(prm_name) if /^web_site_\\d+$/ =~ prm_name
end
params[:profile][:web_sites] = web_sites.join(\' \').squish
@profile.update_attributes(params[:profile])
...
end
在视图中,您可以使用JavaScript添加更多输入。
这里是示例:http://asciicasts.com/episodes/197-nested-model-form-part-2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。