2007年10月23日

userstampをつかってみた

作成,編集をしたユーザの履歴を残すためのプラグイン

acts_as_authenticatedと共に使ってみた。

参考:http://delynnberry.com/projects/userstamp

>script/plugin install svn://delynnberry.com/code/plugins/userstamp/trunk


class User < ActiveRecord::Base
cattr_accessor :current_user
end


migrationファイルで

create_table :posts do |t|
  …
 # Userstamp用
t.column :created_by, :integer
t.column :updated_by, :integer
end

を加えてrake db:migrate

class Post < ActiveRecord::Base
belongs_to :created_by, :class_name => "User", :foreign_key => "created_by"
belongs_to :updated_by, :class_name => "User", :foreign_key => "updated_by"
end


userstampを使うコントローラに

before_filter :set_current_user
protected
def set_current_user
User.current_user = current_user
end


これで Postモデルを saveするときに、現在のユーザがcreated_byもしくはupdated_byに自動で入る。

取り出す際は、これらのカラムにUserが入っているような形なので
view

@post.updated_by.login

でログインIDがとれたりする。
ラベル:Rails
posted by sistailsnow at 09:47| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年10月18日

ActiveRecordStore

まず、sessionの持ち方をActiveRecordStoreに変更する。
ActiveRecordStore 
>rake db:sessions:create
>rake db:migrate

environment.rb
  config.action_controller.session_store = :active_record_store
 のコメントをはずす

でOK

>model/Session.rb を作成(ログインしているユーザをセッションから取り出すため)

コンソール
>ses = Session.find(:first)
>Marshal.load(Base64.decode64(ses.data))
でとりだしたセッションsesに入っているデータをハッシュでとりだせた。
ラベル:Rails
posted by sistailsnow at 16:33| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年10月17日

new -> confirm -> save (imgタグの罠)

以下のようなコントローラで商品を登録するページを作成した。


def index
#sessionのクリアー
session[:product] = nil
end

def new
@product = (session[:product] || Product.new)
end

def new_confirm
@product = Product.new(params[:product])
session[:product] = @product
end

def new_save
product = session[:product]
product.save
end


すると、new_confirmを実行すると、なぜか indexメソッドが後から実行されている。おかげで、sessionにproductが保存できない。

原因は、imgタグメソッドにあった。

newで画像urlを入力するようにして、new_confirmでその画像をプレビューしていた。

その際、newでurlを空にすると、new_confirmのビューには


<img src="" />


というタグが入ることになる。
このタグが、画像を探しにindexメソッドを実行してくれたおかげで、いっつもsessionを消してくれたというわけであった。
posted by sistailsnow at 17:34| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年09月28日

acts_as_taggable

あるモデルに対してタグ付けを行うプラグイン

あるモデル => taggingモデル <=(has_many) tagモデル


環境 rails:1.2.3 ,ruby:1.8.6

インストール

>ruby script\plugin install acts_as_taggable


migrationファイルの生成

>rake acts_as_taggable:db:create


生成されたファイル

class AddActsAsTaggableTables < ActiveRecord::Migration
def self.up
create_table :tags do |t|
t.string :name
end

add_index :tags, :name

create_table :taggings do |t|
t.integer :tag_id, :taggable_id
t.string :taggable_type
end

add_index :taggings, [:tag_id, :taggable_type, :tag_id]
add_index :taggings, [:taggable_id, :taggable_type, :tag_id]
end

def self.down
drop_table :tags
drop_table :taggings
end
end


しかし、これではrake:migrate失敗

次のように修正

class AddActsAsTaggableTables < ActiveRecord::Migration
def self.up
create_table :tags do |t|
t.column :name, :string
end

create_table :taggings do |t|
t.column :tag_id, :integer
t.column :taggable_id, :integer
t.column :taggable_type, :string
end

add_index :taggings, :tag_id

end

def self.down
drop_table :tags
drop_table :taggings
end
end



テーブル作成

>rake db:migrate


あるモデル(タグ付けしたい)へ次のように記述

class Product < ActiveRecord::Base
acts_as_taggable
end



タグを付ける


View(create.rhtml等)

<%= text_field_tag 'tags',@product.tag_list %>

Controller
def create.rhtml
@product.tag_list = params[:tags]
@product.save
end


タグでよびだす。

controller
 def show
@tag = Tag.find(params[:tag_string])
@products = @tag.tagged
end

params[:tag_string]はタグの文字列

ラベル:Rails
posted by sistailsnow at 20:32| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年09月11日

ActionMailer

http://wota.jp/ac/?date=20050731

のサイトを参考にさせていただきました。
ラベル:Mail Rails
posted by sistailsnow at 14:48| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年09月04日

rails テキスト表示時に改行brを入れる

ヘルパーに次のようなメソッドを作成。

def insert_br(str, escape = true, br = "<br />")
if escape
return h(str).gsub(/\r\n|\r|\n/,br)
else
return str.gsub(/\r\n|\r|\n/,br)
end
end


str内に改行があれば<br /<にして出力する。
ラベル:Rails
posted by sistailsnow at 16:22| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年08月27日

ブラウザ間の違いを緩和する方法

ブラウザ間で、タグによってmarginやpaddingのデフォルト値が異なる。そこで最初にすべてのデフォルト値を0に指定してやることで表示のずれを緩和することができる。

スタイルシートにて

*{
margin:0;
padding:0;
}


ただし、このようにするとそれぞれのタグできちんとmargin,paddingを指定してやらないといけない箇所が増えてくる問題もある。
ラベル:stylesheet
posted by sistailsnow at 16:58| Comment(0) | TrackBack(0) | やってみた | このブログの読者になる | 更新情報をチェックする

2007年08月23日

ActiveRecorde:findとdetect

ActiveRecordeで UserとBookモデルに

User
has_many :books


といった場合に、DBからではなく、すでに実体のあるuserから、条件をつけてBookを取り出したいとする。

ArrayやHashなど、Enumerableが普通にmixi-inされているクラスであれば、 findメソッドも、detectメソッドも使える。

しかし、ActiveRecordeのfindメソッドはDBからデータを拾ってくるメソッドになっているので、detectメソッドを使う。



user.books.detect{|book| book.created_at = Datetime.now }
ラベル:Rails
posted by sistailsnow at 17:38| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年08月21日

select_dateと値の変換

date_selectタグの値はcontroller側で受けとるとうまいことdate型に変えてくれるのだが、select_dateタグを使うと、年、月、日がそれぞれハッシュになっていて、date[year],date[month],date[day]で値は取れるが勝手にはdate型にしてくれない。

 そこでselect_dateで出力されるHTMLをdate_selectで出力されるHTMLっぽく文字列置換してやるととりあえず、自動的にDate型に変換してくれた。

Helperで(app/helpers/application_helper.rb)

def alternate_select_date(date,options = {})
html = select_date(date,options)
html.sub!("[year]","(1i)")
html.sub!("[month]","(2i)")
html.sub!("[day]","(3i)")
end

を定義して

Viewで

<= alternate_select_date(Date.today,{:prefix => "hoge"}) >

などとして出力。

値を受けとったControllerでは

params[:hoge]

とするとDate型の値としてとってこれる。
ラベル:Rails
posted by sistailsnow at 15:07| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

タグのname属性の値指定

ActionView::Helpers::DateHelper などで、表示するHTMLタグのname属性を任意のものに変更したい場合。

たとえば
select_date(date = Date.today, options = {})


のような場合、optionsの指定で

:prefix => 任意の名前


でname属性を指定できる。


<%= select_date Date.today,{:prefix => "hoge"} %>


とすると


<select id="hoge_day" name="hoge[day]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21" selected="selected">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>


といったHTMLが生成できる

これは ActiveRecordオブジェクト以外のものを扱うときに非常に有効だと思われる。
ラベル:Rails
posted by sistailsnow at 10:50| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。