Archive

Posts Tagged ‘rails’

ActiveSupportで日時変換

September 2nd, 2009 No comments

Railsではたまに1.week.from_nowといった書き方を見ます
これはActiveSupportによってnumericクラスが拡張されているもので、様々な指定方法があります

例えば、?時からその日中(23:59まで)のデータをfindしたい場合、

# 12:00~23:59まで
date = Time.parse("12:00")
cond = []
cond << "created_at > ? AND created_at < ?"
cond << date
cond << (date + 1.day).beginning_of_day
@data = Model.find(:all, :conditions => cond)

といった書き方が出来ます
beginning_of_dayは時間の部分をその日の00:00に変換したtimeオブジェクトを返します(Time型のみ)

Rails の Date, Time 拡張

Tags:

Controllerから呼ばれるHelperで

August 22nd, 2009 No comments

今日の作業で良くわかんなかったとこ

AjaxリクエストへHTML(tableのセル)を返す処理で、以前はControllerに書いていた処理をHelperに移してみた
その際、折角だからViewでも一部被ってた部分をマージしてlink_toやimage_tagなどのHelperメソッドに置き換えた
(ViewでもそのHTMLが欲しい時にHelperを呼ぶようにするため)
すると、Viewからは普通に呼べるのだけど、AjaxでControllerからHelperを呼ぶとlink_toやimage_tagがうまく動かなかった
色々includeとかしてみたけどlink_toで必ずnil.url_forとなってしまったので諦めた(結局HTMLべた書きした)

Tags:

Railsのform_forでの注意

August 4th, 2009 No comments
# view
<% form_for :hoge, :url => {:action => :update} do |f| %>
  <% f.hidden_field :id, {:value => @hoge.id} %>
  <% f.text_field :name, {:value => @hoge.name} %>
  <% f.submit %>
<% end %>
# controller
def update
  if params[:hoge]
    hoge = Hoge.find_by_id(params[:hoge][:id])
    hoge.attributes = params[:hoge]
    hoge.save!
  end
end

のような書き方をするとうまく保存されません
WARNING: Can’t mass-assign these protected attributes: id
のような警告をlogに吐きます
どうやらidは上書きも認められてないようです
hidden_fieldではなく、form_forの引数として渡すとうまく行きます

# view
<% form_for :hoge, :url => {:action => :update, :id => @hoge.id} do |f| %>
  <% # f.hidden_field :id, {:value => @hoge.id} %>
  <% f.text_field :name, {:value => @hoge.name} %>
  <% f.submit %>
<% end %>
# controller
def update
  if params[:hoge]
    # hoge = Hoge.find_by_id(params[:hoge][:id])
    hoge = Hoge.find_by_id(params[:id])
    hoge.attributes = params[:hoge]
    hoge.save!
  end
end

これでうまいこと更新出来ます

Tags: ,

Railsのcheck_box_tag

August 3rd, 2009 No comments
<%= check_box_tag "hoge[check]" %>

だとチェックしてもうまく行かない(hoge[check]がtrueになってない)
しっかりvalueを設定する必要がある

<%= check_box_tag "hoge[check]", 1, false %>
<%= check_box_tag "hoge[check]", true %>

valueがtrueだとちゃんとチェックボックスの値を受け取れるみたい
3つ目の引数はcheckedに当たります

Tags:

Railsでiphoneからのアクセスを振り分け

July 31st, 2009 No comments

Rails2.3.3で確認
[追記1] set_iphone_formatにviewファイルを振り分ける記述を追記
[追記2]振り分けれてなかったので修正…

# config/initializers/mime_types.rb
# 以下の行のコメントを外す
Mime::Type.register_alias "text/html", :iphone

###
# application_controller.rb
  # iphone/ipod touchからのアクセスかどうか(ちょっと適当っぽい)
  def is_iphone_request?
    request.user_agent =~ /(Mobile\/.+Safari)/
  end

  # iphone/ipod touchだったらiphone向けに表示切換え
  def set_iphone_format
    if is_iphone_request?
      request.format = :iphone
    end
  end

###
# hoge_controller
  def index
    ...
    respond_to do |format|
      format.html
      format.iphone
    end
  end

こんな感じにしとくと、iphoneからのアクセスでは
views/layout/application.iphone.html.erb
views/hoges/index.iphone.html.erb
を描画してくれます

#iphone用のディレクトリを用意してそこに*.iphone.html.erbを全部ぶっ込んで使うにはどうすればいいんだろう…
#iphone用コントローラとか作りたくないし;

Tags: ,