kat*_*tie 1 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
在@ city.id.blank下面的下一个操作中?不会返回零,当我不选择任何城市.甚至在日志中它显示空白但在控制器中下一步操作 unless @city.id.blank? 仍然返回true.这是怎么回事?提前谢谢你
形成
<%= form_for :city,:size=>"40", :url=>{:action =>"next"} do |f| %>
<%= f.collection_select(:city_id, City.all, :id, :name ,:prompt=>"Select your city") %>
Run Code Online (Sandbox Code Playgroud)
调节器
def next
@city=City.find(params[:city][:city_id])
unless @city.id.blank?
session[:city_id] = @city.id
redirect_to show_home_path
else
redirect_to :controller=>"home" ,:action=>"index"
end
end
Run Code Online (Sandbox Code Playgroud)
日志
Parameters: {"utf8"=>"?", "authenticity_token"=>"7N5sQqKGKlK5IdXnj81629p1R0p+OpkhhvZDC1PjtHQ=", "city"=> {"city_id"=>""}, "commit"=>"continue"}
City Load (0.1ms) SELECT "cities".* FROM "cities" WHERE "cities"."id" = ? LIMIT 1 [["id", ""]]
Run Code Online (Sandbox Code Playgroud)
你params[:city][:city_id]是一个空字符串,从而@city将nil(或取决于什么是你的模型背后,你会得到一个异常):
@city = City.find(params[:city][:city_id])
Run Code Online (Sandbox Code Playgroud)
但是使用非空值(或者取决于您正在使用的Ruby版本的异常)nil来响应该id方法.你应该看@city.blank?,@city.nil?或只是@city不是在看@city.id:
if @city
session[:city_id] = @city.id
redirect_to show_home_path
else
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |