所以我有一个用户可以输入价格的表格.我正在尝试使用before_validation来规范化数据,如果用户放置了$,则剪切$.
before_validation do
unless self.price.blank? then self.price= self.price.to_s.gsub(/\D/, '').to_i end
end
Run Code Online (Sandbox Code Playgroud)
如果用户输入$ 50这段代码给了我0.如果用户输入50 $这个代码给了我50.我认为因为数据类型是整数,rails在我的before_validation之前运行.to_i并且在$之后剪切所有内容.如果数据类型是字符串,则相同的代码可以正常工作.
任何人都有一个解决方案,让我保持整数数据类型?
我的评论控制器需要调整嵌套,但我收到一些错误.这是我一直在尝试的:
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这给了这个:
/Users/rbirnie/rails/GoodTeacher/app/views/comments/_form.html.erb:3: syntax error, unexpected keyword_else, expecting keyword_end'); else
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用吗?看起来很简单......
这是完整视图:
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
<div class="control-group">
<%= f.label :subject %>
<div class="controls"><%= f.text_field :subject %></div>
</div>
<div class="control-group"> …Run Code Online (Sandbox Code Playgroud) 我正在使用ruby geocoder gem按位置搜索.我想将搜索限制在已正式启动的位置.如果有人通过zip搜索,使用正则表达式很容易.但如果有人按城市搜索,我需要将城市转换为邮政编码,检查我的邮政编码表,如果是肯定的,则返回搜索结果.
该地理编码器API具有用于反向地理编码的区段:
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.city = geo.city
obj.zipcode = geo.postal_code
obj.country = geo.country_code
end
end
after_validation :reverse_geocode
Run Code Online (Sandbox Code Playgroud)
这显然是为了在模型中使用而构建的.但我试图在我的控制器中使用它,但是obj.zipcode根本不起作用.Geocoder.search('san jose,ca')似乎回归了我需要的东西,我只是不知道如何去做.这是我在的地方:
if params[:search].present?
# coords = Geocoder.coordinates(params[:search])
zip = Geocoder.search(params[:search])
if Zip.where(:zip => (params[zip.zipcode]), :launch => true).exists?
addresses = Address.near(params[:search], 25, :order => :distance)
@profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil?
@title = "Addresses Near " + (params[:search]).to_s
else
if Zip.where(:zip => (params[zip.zipcode]), :nearlaunch => true).exists?
addresses = Address.near(params[:search], 25, …Run Code Online (Sandbox Code Playgroud)