inohilog

/var/log/inohiro.log

Controller で params[:hoge].blank? すればいいんじゃないか、という話

collection_selectを使ってるViewだとvalidates_hoge_ofシリーズが使えない(? - INOHILOG の続き。
Modelにvalidation_presence_ofを使って、フォームの空欄をValidationしたかったのですが、collection_selectを使ってるViewだとそれがうまく動かない*1問題。
Controllerで

  # POST /articles                                                                                                                                                         
  # POST /articles.xml                                                                                                                                                     
  def create                                                                                                                                                               
    @article = Article.new(params[:article])                                                                                                                               
                                                                                                                                                                           
    if @article.title.blank?                                                                                                                                               
      flash[:error] = "title は空っぽにできません"                                                                                                                         
      redirect_to( :action => 'new' )                                                                                                                                      
      return                                                                                                                                                               
    end              
    # 省略

的なことをやって、飛ばした先のView(この場合だとnew.html.erb)に

<% if flash[:error] %>                                                                                                                                                     
  <span style="color: Red;">                                                                                                                                               
    <%= flash[:error] %>                                                                                                                                                   
  </span>                                                                                                                                                                  
<% end %>       

こんなことを書いておけば、titleの項目を空っぽの状態で送信しても、一応エラーチェックできる。


でもデータに関係するロジック(まさに検証とか)はModelに書きなさいと教わった気がするんですが。この方法はどうなんでしょう。

*1:collection_selectを使っている項目についてvalidation_presence_ofしているわけではない...