困ったときのメモ このページをアンテナに追加 RSSフィード

2011-10-09 Rails走り書き

整理されていない走り書きメモ

| 22:17 | 整理されていない走り書きメモを含むブックマーク 整理されていない走り書きメモのブックマークコメント


devise入れたら

  rails g devise:install
  rails g devise user

modelとmigrationを好きなだけゴニョゴニョする。

  rake db:migrate
  rails g devise:views users

"config/initializers/devise.rb"に"config.scoped_views = true"ってしとく。
xhrリクエストでauthenticate_user!とかされても当然リダイレクトしないので、application_controllerとかメソッド作ってリダイレクトさせる。

kaminari入れたら

  rails g kaminari:config
  rails g kaminari:views default

acts-as-taggable-on入れたら

  rails g acts_as_taggable_on:migration
  rake db:migrate

タグ付けするモデルに(:タグ名複数形で)

    acts_as_taggable_on :tags

キャッシュするならフィールド追加(cached_タグ名単数形_list:string)

    rails g migration add_column_to_tables cached_tag_list:string
    rake db:migrate

typus入れたら

  rails g typus

スマホサイトのおやくそく

  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=0.6667, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="format-detection" content="telephone=no"> 

レイアウトで切り替えるヘッダー

PCサイト用

  <link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.3.0/bootstrap.min.css">

スマホ

  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css" />
  <script src="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js"></script>

useful ヘルパー

  strip_tags(STRING)・・・・・・・・・・htmlタグを除去する。
  simple_format(STRING)・・・・・・・<p>~</p>で囲んで、安全なhtmlタグも使える。
  STRING.html_safe・・・・・・・・・・・・そのまま安全なhtmlタグも使える。

useful アクティブレコード配列

  Array.find・・・・・・・・・・・・・・・・・・・・ブロックの結果がtrueを返すときその値を返す
  Array.select・・・・・・・・・・・・・・・・・ブロックの結果がtrueを返すものの配列を返す

useful モデル

検索はスコープで

  scope :search_title, lambda {|keyword| where('title like ?', "%#{keyword}%")}


前のレコード、次のレコードメソッド

  def previous_record
    self.class.unscoped.where('created_at < ?', self.created_at).order(:created_at).last
  end
  def next_record
    self.class.unscoped.where('created_at > ?', self.created_at).order(:created_at).first
  end

2011-10-08 Railsでスマホサイトを作ってみたのでメモ

Railsでスマホサイト。ぬー。

| 22:48 | Railsでスマホサイト。ぬー。を含むブックマーク Railsでスマホサイト。ぬー。のブックマークコメント


はじめに

業務でなんかスマホ用Webアプリ作ることになって、まだまだ試行錯誤中。いちおう形はできたものの、自分のスキル不足を実感している今日この頃です。
Rails3.1とjQuery Mobileで作ることにしてみたけど、いろいろ分かってきたのでメモ。

jQueryMobileはすごい。けどイヤだ。

jscssさえ読み込んでしまえば、ほとんど特別なことをしなくても、綺麗に最適化されたデザイン、アニメーションが利用できてサクサク作れる。ただ、いろんなとこで言われてるけど、POSTメソッドとかで勝手にAjaxになる上、適当にリダイレクトしてしまうのがヤな感じ。

そのリンクやフォームだけAjaxを無効にするには、以下の属性をタグに追加する。

'data-ajax' = 'false'

で、これはこれで解決できるんだけど、paypalへのリダイレクトで止められたときには、これだけじゃどうしようもなかった。どうもpaypalに限らず、外部のサイトへのリダイレクトはGETメソッドじゃないとだめっぽい(違うかも)。なので、routes.rbで泣く泣くGETでアクセスするようにした。RESTじゃないなーと思うけど、なんか解決方法があるのかも。

あと、DOMいじったときのスタイルを適用する方法でいくらか時間がかかった。
まとめてたサイトがあった気がするので、またあとで追記する。

とりあえず今のところの感想というか。

正直、すごい楽だった。もー、仕様変更多すぎてウワーってなってたけど、デザインとかCSSとかに悩まなくていいのは気分的にすごい楽。引き継ぎとか考えたら、資料が多くてメジャーなやつ使うのがお互いにいいよねー。

デザインについてはTwitterのBootstrapの方が好みなんだけど、記述量が多い気がするので、ぐうたらな僕にはちょっとしんどい。スマホ用はあるのかな?自分でやればいいんだろうけど。

どうせならpjaxまで・・と思ってたらRails3.2で〜なんて話らしいので、ほっとこうと思う。

なんかCoffeeScript勉強してたハズだったのに、ここんとこご無沙汰でもうほとんど忘れてしまってる・・・。

いいのか、悪いのか、よく分からないまま進んでる感じがすごく気持ち悪い。
なんかまた個人的に作るかなー。

2011-09-12 acts_as_taggable_on が便利すぎて鼻血でそうです。

Railsで、てっとりばやくアンケートフォームをつくる

| 19:57 | Railsで、てっとりばやくアンケートフォームをつくるを含むブックマーク Railsで、てっとりばやくアンケートフォームをつくるのブックマークコメント


販売計画.heroku.com」に、アンケートフォームを追加してみた。
選択肢を用意して〜とかってときに、acts_as_taggable_onでうまいこといったのでメモ。
acts_as_taggable_on については前記事に。キャッシュの付け方も追記した。

はじめに

アンケート用のモデルを作る。めんどいからscaffoldで。
選択項目はacts_as_taggable_onに丸投げするので、そのキャッシュフィールドと記入項目を。
ただし、選択肢を作るためのテンプレレコードを確保するので、そのフラグもつけとく。
あとは必要であればメアドとか、名前欄とかも入れる。

rails g scaffold questionnaire cached_satisfaction_list:string cached_trigger_list:string body:text template:boolean

questionnaireモデルに追記する。

選択項目を作っていく。ここでは、2つ項目をつけてみた。

class Questionnaire < ActiveRecord::Base
  acts_as_taggable_on :satisfactions, :triggers
end


コントローラでの処理

挙動をどうするかで10分くらい悩んだ。が、newとcreate以外は認証ではじくようにして、
edit時にテンプレを編集するようにした。create時にはテンプレのリスト内のものだけしか
入らないようにゴニョゴニョする。modelでやろうとしたけどタイミング的にできないっぽい。

ビューの書き換え

フォームについては、newのときとeditのときとで選択肢の表示方法を変える必要がある。
_form.html.erbの一部

  <div class="field">
    <p>このサイトの評価をお願いします</p>
    <% Questionnaire.satisfaction_counts.order(:name).each do |tag| %>
      <label>
        <%= f.radio_button :satisfaction_list, tag %> <%= tag %>
      </label>
    <% end %>
    <% if action_name == 'edit' %>
      <%= f.text_field :satisfaction_list %>
    <% end %>
  </div>

なんかこれダサイ。

おわりー

要するに、tag_list的な感じで選択項目を増やすのが楽ちんですよということです。
ラジオボタンチェックボックスもセレクトボックスでもどうにでもなるのが素敵なかんじ。

〜〜 2011-09-17 ビューを手直しした。〜〜

チェックボックスとかのラベルは、「labelタグ」で囲んでしまえばいいということを今さら知ったので書き換えた。IE6とかもう知らんです。

2011-08-22 Railsで帳票フォームのやり方が・・・

Rails 3.1 で帳票フォームをつくるー

| 16:35 | Rails 3.1 で帳票フォームをつくるーを含むブックマーク Rails 3.1 で帳票フォームをつくるーのブックマークコメント


はじめに

親子関係のある帳票フォームは「accepts_nested_attributes_for」なかんじで比較的簡単だったので、調子にのって親子関係のないマスタ系の帳票フォームを作ったらハマったのでメモ。


ちなみにこれは 「 販売計画.heroku.com 」 で実装して、後にAjax化した。
なので危険なとこがあったら、教えてください。

モットーは 「 コードをできるだけ書かない 」

参考

http://d.hatena.ne.jp/toshifusa1423/20100524/1274688123
http://www.atmarkit.co.jp/fcoding/rails/articles/rails3/04/rails304b.html

準備

おなじみのscaffoldで以下の内容を。

rails g scaffold product name:string price:decimal stock:integer


マスタ系の帳票フォーム(ふつうの)

とりあえず、追加と削除は後回しで更新のみできるフォームを作る。

帳票フォームと一括更新用のルーティングを追加
config/routes.rb

resources :products do
  get :edits, :on => :collection
  put :updates, :on => :collection
end

メソッド追加
app/controllers/products_controller.rb

def edits
  @products = Product.all
end

def updates
  @products = Product.all

  respond_to do |format|
    if Product.update(params[:product].keys, params[:product].values)
      format.html { redirect_to products_url, :notice => 'Product was successfully updated.' }
      format.json { head :ok }
    else
      format.html { render :action => "edits" }
      format.json { render :json => @products.errors, :status => :unprocessable_entity }
    end
  end
end

ビュー追加
app/views/products/edits.html.erb

<h1>Edits products</h1>

<%= form_tag({:action => :updates}, {:method => :put}) do %>
  <table>
    <tbody>
      <tr>
        <th>Name</th>
        <th>Price</th>
        <th>Stock</th>
      </tr>
  
      <% for @product in @products %>
        <tr>
          <td><%= text_field 'product[]', :name %></td>
          <td><%= text_field 'product[]', :price %></td>
          <td><%= text_field 'product[]', :stock %></td>
        </tr>
      <% end %>
    </tbody>
    <tfoot>
      <tr>
        <td colspan='4'><%= submit_tag %></td>
      </tr>
    </tfoot>
  </table>
<% end %>

<br />

<%= link_to 'Back', products_path %><br>


まとめ

「 form_tag 」 の書き方忘れてハマった。中カッコ必須。
なんか変な書き方っぽいけど、どうなんだろ。


〜〜form_tagが変な位置だったので修正。あとインデントも〜〜
〜〜いらんとこ削った〜〜
〜〜Ruby1.9.2に対応〜〜

2011-08-20 Rails3.1とかCoffeeScriptとか

にゃー。Rails 3.1 rc5 と heroku でサイト作った

| 18:35 | にゃー。Rails 3.1 rc5 と heroku でサイト作ったを含むブックマーク にゃー。Rails 3.1 rc5 と heroku でサイト作ったのブックマークコメント


オマージュですよ。劣化版の。


怒られたら消ス。もしくは俺が消サレル。

https://hanbaikeikaku.heroku.com/

Railsおもすれー。
CoffeeScriptおもすれー。