[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されているという認識なのだろうか?
ふーむ。
[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
[rails3.2][routes]resourcesとresourceは違うよ。
resorce
-> indexなし
resources
-> indexあり
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
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”
"美大女子で覚えてる自給自足パターンでいうと、銀座のクラブで働いていて、やってる絵が自身のヌードなわけ。で、上客ついてて同伴出勤で自分の個展に行くとw するとそいつが絵を買ってくれて。シュガーダディ・スキームみたいに、体を売らずに学費を全部稼いでいた女子が居た。あれは凄くかっこいいなーと思っていた。"
posts/334493286619918 (via plasticdreams)
(出典: otsune、tokunoribenから)
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をちゃんと読む事
omniAuthを利用したfacebook、twitterログイン
omniAuth実装
ruby1.9.2 + rails3.2 + OmniAuth 1.0
reg twitter app at twitter and Facebook dev center :
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/715twitterについての参照
https://github.com/arunagw/omniauth-twitterFacebookについての参照
https://github.com/mkdynamic/omniauth-facebook
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が使えるようになった。
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()
})
})
すごい簡単な例だけど、非常に楽だ。