[rails3.2][view][controller] deleteメソッド呼ぶとdestroyメソッド実行される

ActiveRecodeを介して削除するのがdestroy

下記のように削除リンクを追加したとき、
<%= link_to ‘hoge’, post’ , :method => :delete %>

controllerで呼び出されるのは、以下のメソッド
def destroy
end 

rake routesを読むと下記の通り。
          DELETE /posts/:id(.:format)      posts#destroy


つまり、deleteメソッドに対してposts#destroyメソッドへroutingされているという認識なのだろうか?

ふーむ。

参考:
http://d.hatena.ne.jp/POCHI_BLACK/20101026

tweet
このエントリーをはてなブックマークに追加

[rails3.2][routes] posts_pathとpost_path

一瞬間違えたので、気をつけておきたい。

config/routes.rb : 
resources :posts


<%= link_to ‘hoge’,  posts_path %>
->  Posts#indexへrouting



<%= link_to ‘hoge’, post_path %> 
-> Posts#showへrouting

tweet
このエントリーをはてなブックマークに追加

[rails3.2][routes]resourcesとresourceは違うよ。

resorce
-> indexなし

resources
-> indexあり 

参考:
http://wiki.paulownia.jp/rails/routing

tweet
このエントリーをはてなブックマークに追加

rails3.2のインストール(旧railsバージョンと共存)

ruby 1.9.2 + rails 3.2をインストール
rvm installはインストールしておいてね


$ rvm list known
-> ruby 1.9.3使える事確認


$ rvm install 1.9.3
-> gccエラー出る時は以下の対処を行う

以下のサイトより OS X 10.7 Lion: GCC-10.7.pkgをダウンロード
https://github.com/kennethreitz/osx-gcc-installer 



$ rvm list
-> ruby 1.9.3がインストールされている事を確認


$ rvm gemset create rails32
-> rails32用のgemsetを作成 


$ vim ~/.bashrc

rvm use 1.9.3@rails32


$ rvm use 1.9.3@rails32

$ gem list
-> 空っぽである事(rakeとbundlerだけ入っている)

$ gem install rails


【確認】

$ ruby -v
-> ruby 1.9.2 

$ rails -v
-> rails 3.2 

tweet
このエントリーをはてなブックマークに追加

controllerのメソッド追加した際にroutesの編集をお忘れなく

controllerでメソッド追加すると「no routes matches」とか良く出る。

この時は大体 config/routes.rbに設定が漏れている。

ex)

コントローラー作る: 

$ rails g controller Post index


views/post/index.html.rbにフォームタグ使って飛ばそうとする : 

<% form_tag :action => “twitter” %> 
  ごにゃごにゃ
<% end %>


PostController.rbに処理内容を記述 :

def twitter
  ごにゃごにゃ
end



ここのまま表示しようとするとroutes周りでエラー。これはroutesを以下で解決。


edit config/route.rb : 

get “post/twitter”

tweet
このエントリーをはてなブックマークに追加

"美大女子で覚えてる自給自足パターンでいうと、銀座のクラブで働いていて、やってる絵が自身のヌードなわけ。で、上客ついてて同伴出勤で自分の個展に行くとw するとそいつが絵を買ってくれて。シュガーダディ・スキームみたいに、体を売らずに学費を全部稼いでいた女子が居た。あれは凄くかっこいいなーと思っていた。"

posts/334493286619918 (via plasticdreams)

(出典: otsunetokunoribenから)

tweet
このエントリーをはてなブックマークに追加

herokuのdeployとsqliteについて

deploy in heroku :

https://devcenter.heroku.com/articles/git

heroku push したときにsqlite3でgem install errorになる。
だってherokuはposgreだもん! 


という訳でsqliteはdevelopmentとtest時に利用するようにする。
ついでにherokuではpg gemも必要なのでインスコ 



edit Gemfile : 

gem ‘sqlite3’, :group => [:development, :test]
group :production do
  gem ‘pg’
end

詳しくはherokuのdevをちゃんと読む事

tweet
このエントリーをはてなブックマークに追加

omniAuthを利用したfacebook、twitterログイン

omniAuth実装

ruby1.9.2 + rails3.2 + OmniAuth 1.0


reg twitter app at twitter and Facebook dev center  : 

https://dev.twitter.com/apps
https://developers.facebook.com 



edit Gemfile : 

+ gem ‘omniauth’
+ gem ‘omniauth-twitter’
+ gem ‘omniauth-facebook’


install gems : 

$ bundle install


make&edit config/initialize/omniauth.rb :

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, ‘Consumer Key’, ‘Consumer Secret’
  provider :facebook, ‘app id’, ‘app Secret key’
end


app/contorllers/application_controller.rb : 

class ApplicationController < ActionController::Base
  protect_from_forgery
  helper_method :current_user

  private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
end

edit app/views/layout/application.html.erb :

<% if current_user %>
  <%= current_user.name %> <%= link_to ‘ログアウト’, logout_path %>
<% else %>
  <%= link_to ‘ログイン’, ‘/auth/twitter’ %>
  <%= link_to ‘ログイン’, ‘/auth/facebook’ %>
<% end %> 


make session controller : 

rails g controller sessions


app/controllers/sessions_controller.rb : 

class SessionsController < ApplicationController
  def create  
    #omniauth.auth環境変数を取得
    auth = request.env[“omniauth.auth”]
    #Userモデルを検索
    user = User.find_by_provider_and_uid(auth[“provider”], auth[“uid”]) || User.create_with_omniauth(auth)

    session[:user_id] = user.id
    logger.debug auth.to_yaml
    redirect_to root_url, :notice => “Signed in!”
  end


  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice =>”Log out”
  end
end


make db : 

$ rails g scaffold user provider:string uid:string screen_name:string name:string
$ rake db:migrate


app/models/user.rb : 

class User < ActiveRecord::Base
  def self.create_with_omniauth(auth)
    create! do |user|
      user.provider = auth[‘provider’]
      user.uid = auth[‘uid’]
      user.screen_name = auth[‘info’][‘nickname’]
      user.name = auth[‘info’][‘name’]
    end
  end
end


config/routes.rb :

+ resources :users

- # root :to => ‘welcome#index’
+ root :to => ‘users#index’

+ match ‘/auth/:provider/callback’, :to => ‘sessions#create’
+ match ‘/logout’ => ‘sessions#destroy’, :as => :logout

remove public/index.html

$ rm public/index.html

test as local :

$ rake routes
$ rails server 

git で作る

$ git init
$ git add .
$ git commit -m “git init”

$ heroku  

参考

http://ja.asciicasts.com/episodes/241-simple-omniauth
http://d.hatena.ne.jp/kaorumori/20111113/1321155791
http://npb.somewhatgood.com/blog/archives/715

twitterについての参照
https://github.com/arunagw/omniauth-twitter

Facebookについての参照
https://github.com/mkdynamic/omniauth-facebook

tweet
このエントリーをはてなブックマークに追加

rails3.1とrails3.0x系

rails3.1

asset_select_jqueryが使えるようになった

参考:
http://ramblinglabs.com/blog/2011/10/rails-3-1-and-the-assert_select_jquery 

has_secure_passwordが使えるようになった。

その他
http://pragprog.com/wikis/wiki/ChangesInRails31 

tweet
このエントリーをはてなブックマークに追加

CoffeeScriptとjqueryでこんなに短縮化できる

画像をクリックしたら、同じdiv要素内のsubmitを動かす

・coffeeScript + jQuery

$ ->
  $(“img”).click ->
    $(this).parent().find(“:submit”).click() 

・jQuery

こんな感じなのかな?
$.ready(function(){
  $(“img”).click(function(e){
    $(this).parent().find(“:submit”).click()
  })
})
 

すごい簡単な例だけど、非常に楽だ。

tweet
このエントリーをはてなブックマークに追加