トップページ⇒php
1001コメント455KB

【RoR】Ruby on Rails Part12

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/07/19(火) 13:44:46.30ID:zxrusyvr
■前
【Ruby】Ruby on Rails Part11
http://hibari.2ch.net/test/read.cgi/php/1292032736/

■参考サイト
<英語>
本家:http://rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails
http://ruby-toolbox.com/
http://rubygems.org/
http://agilewebdevelopment.com/plugins/top_rated

<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/

http://twitter.com/dhh
http://www.loudthinking.com/
0074nobodyさん2011/07/23(土) 15:56:41.22ID:???
>>67
使ってて、うまくいってたと思って
mysqlの設定いじってたら
rails sを実行する時点でmysql2エラーが発生するようになった。
rubystackのディレクトリは独立してるからアンインストールと再度インストールで直ると思ってやったけど
やっぱり同じエラーが出る

最初の頃に自分でコンパイルして色々とインストールしようとした
エラー頻発したり dmgファイルでインストールしまくったりしたから
変な残骸か何かでシステムの中身が壊れてるのかな?

リセットした状態で普通にインストールできるような状態にならないでしょうか?
0075nobodyさん2011/07/23(土) 15:57:37.36ID:???
ちなみにMacOS10.6です
0076nobodyさん2011/07/23(土) 17:14:13.46ID:???
>>74
Gemfileに
gem 'mysql2', '< 0.3'
0077nobodyさん2011/07/23(土) 18:35:42.79ID:7CgsKONL
rails.vimが便利すぎる件 - (゚∀゚)o彡 sasata299's blog
http://blog.livedoor.jp/sasata299/archives/51075825.html

川o・-・)<2nd life - rails.vim まとめ
:R で controller と view の切り替えが可能です。コントローラの場合、カーソル現在位置のメソッドに対応する view に飛んでくれます。
http://d.hatena.ne.jp/secondlife/20061222/1166781841

ナレッジエース - Vimを使ったRuby On Rails開発環境の構築
通常コマンドプロンプトから実行するRailsコマンドを、Vimの中から実行できるようになります。
http://blog.blueblack.net/item_133

Windows版VimでRubyを快適に使う設定-AutoComplPopが便利すぎる!! | ぐるらん
http://gururan.com/20100807/021504

http://www.vim.org/scripts/script.php?script_id=1567

http://b.hatena.ne.jp/t/rails.vim
0078nobodyさん2011/07/23(土) 22:07:58.35ID:???
windowsに

rails2.1
ruby1.8
netbeans6.1

の環境を入れたいです。
なんか相互間のバージョンの違いとかで動かなかったり
インストールすら出来なかったりします。
rails2.1をnetbeans上で手早く扱えるようにするにはどうすればいいですか?

rubystackの場合、rubysrack内のコンソール上でしか動かず
netbeansの実行とかでは動くようになりませんもんね。
0079nobodyさん2011/07/23(土) 22:08:18.87ID:???
ちなみにxpです
0080nobodyさん2011/07/23(土) 22:45:57.32ID:???
>>78
WAMP入れて
cakephpフォルダ設置したら
間違いなくいきなり使えます!
とかとは違うよね。

railsの相互間の依存度は異常
どれか一つでもバージョン合わないとかで、しょっちゅう動かないし
今から参考ソース豊富な2.1したくても
gem install railsで最新が入って動かないし
gem install -v=2.1.0 rails ってしても
エラー出て入らなかったりする
0081nobodyさん2011/07/23(土) 23:07:49.61ID:???
>>80
そんな人のための bundler ですよ
0082nobodyさん2011/07/23(土) 23:18:07.81ID:???
>>81
bundle installしても、最近ダウンロードしたruby1.8とかに別途gem入れても相互間のバージョン合いませんって言われるし
入っても gem install -v=2.1.0 rails
がエラーで入らない
0083nobodyさん2011/07/23(土) 23:49:51.33ID:???
>>82
bundle install --path vendor/bundle ですよ
0084nobodyさん2011/07/24(日) 00:11:10.78ID:y8m7SKug
http://rubyforge.org/frs/?group_id=904

InstantRails で 簡単 Ruby on Rails 体験
http://omakase.ninpou.jp/apdev/instantror.htm
0085nobodyさん2011/07/24(日) 02:38:46.02ID:EbDs6EhB
ruby1.8.7をいれて
gem install -v=2.1.0 rails --include-dependencies
を実行することで

netbeansで編集→サーバー起動
まで可能となりました。

しかし、サーバーをたちあげると下記が出てサンプルのrailsアプリが開けません。
どうすればいいでしょうか?

MissingSourceFile in TopController#index

no such file to load -- sqlite3/sqlite3_native

RAILS_ROOT: C:/works/tes/page

This error occurred while loading the following files:
sqlite3
sqlite3/sqlite3_native
0086nobodyさん2011/07/24(日) 02:46:19.42ID:EbDs6EhB
ちなみにブラウザは立ち上がってます。
ただし上のエラーが出るってことです
0087nobodyさん2011/07/24(日) 02:46:24.60ID:???
エラーメッセージのまんまだと思うが…
0088nobodyさん2011/07/24(日) 02:54:25.72ID:EbDs6EhB

sqlite3.dllをいれることで自己解決しました。
rorはどうして、ここまでror本体でなくgem関係にも全て悩まされるのでしょうか?
簡単にrorのバージョンごとの切り替えを管理出来て
完全動作を保証したようなツールとかあればいいのですが
0089nobodyさん2011/07/24(日) 02:55:16.65ID:EbDs6EhB
>>87
でも、そのエラーだとsqlite3.dllをruby/binに入れろとは分かりませんよね。。。
ググって海外サイトを見て初めて分かりました
0090nobodyさん2011/07/24(日) 04:31:16.80ID:EbDs6EhB
質問させてください。

Windowsに XAMPP RAILS などを入れて利用しています。
投稿の際に日本語を使った時点で文字化けを起こします
XAMPPで入ったMysqlは初期では latinなどの文字列が設定されているようです。

my.cnfに下記を追記すればいいとのことでしたが
c:\xampp\mysql\binの中に my.cnfが 見当たりません
隠しフォルダの表示や登録外拡張子も表示させています。
どうすればいいでしょうか??

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
0091nobodyさん2011/07/24(日) 07:32:44.15ID:EbDs6EhB
>>90は何とか自己解決しました
phpmyadminなどで直接テーブルやフィールドをutf8_general_ciヘ変更すればOKでした。
しかしNetbeansでマイグレーションを行うとデフォルトでのエンコーディングが必ず
latin1でテーブル(フィールドも)が作成されてしまいます。

http://www.mapee.jp/ruby/rails20instantrails20win.html

も試しましたが効果なく出来るテーブル(フィールド)はやはりlatin1です。
どうすればいいでしょうか?
0092nobodyさん2011/07/24(日) 07:39:51.72ID:???
みんなエディタ/IDEなに使ってるの?
0093nobodyさん2011/07/24(日) 08:02:03.71ID:???
ブラウザのjavascriptを無効にしてたら
jqueryは動かなくなる?
0094nobodyさん2011/07/24(日) 09:56:20.00ID:???
>>88
別にrorだけの問題じゃないと思うが…

>>92
俺はemacs

>>93
当然
0095nobodyさん2011/07/24(日) 10:34:43.30ID:HwC1Njq1
database.ymlは?
0096nobodyさん2011/07/24(日) 16:20:10.10ID:???
>>92
vim 一応 rails.vim入れてるけど殆ど使ってない
0097nobodyさん2011/07/24(日) 16:22:05.70ID:???
>>82
bundle exec つけて実行していないとか?
bundle exec rails server
とかで実行すれば、bundlerのバージョンが利用されるよ
0098nobodyさん2011/07/24(日) 18:11:04.96ID:y8m7SKug
Windows版VimでRubyを快適に使う設定-AutoComplPopが便利すぎる!! | ぐるらん
http://gururan.com/20100807/021504

http://www.kaoriya.net/software/vim/about
0099nobodyさん2011/07/25(月) 03:38:46.27ID:???
それにしても、Windowsを窓から投げ捨てるところから始めれば
躓くことが少なくていいんじゃないかな。
0100132011/07/25(月) 12:01:23.68ID:IAHMsfps
collection_Selectを4つ作り、controllerに渡して各パラメータを
@collection=で
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
というふうに整形しました。
これを
view/vegetables/index.html.erbで
<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>
として実行すると
undefined method `%' for ["[\""]:Arrayというエラーが出ます。

整形したものをべた書きすると綺麗に通りますが、@collectionで代入すると
エラーです。

何故でしょうか?
0101nobodyさん2011/07/25(月) 12:12:33.69ID:???
掲示板とか 決まりきった機能 を組み込んでIDとパスワードを渡すだけで
すぐ使えるような組み込み型のモジュールとかってあるんですか?

あるとしたら、こういうタイプの組み込み型モジュールの呼称って何ですか?
0102nobodyさん2011/07/25(月) 12:20:36.38ID:eJ//7zAn
engines
0103nobodyさん2011/07/25(月) 12:42:20.17ID:???
>>102
ありがとう!調べてみたらログイン用とかあるんですね。

普通はwebサービスとか作る時って
自分で一から作るものですか?
それともこういったエンジンを部分利用して作業を極力軽減するのかな?
0104nobodyさん2011/07/25(月) 12:53:52.76ID:???
CMS作るときに、とあるStringフィールドを設けようと思います。

ただし、このフィールドは

英字のみだったり、
英数のみだったり、
半角のみだったり、
数字4桁+数字4桁+数字4桁だったり、
全角可能だったりと

フォーム入力時点のユーザー毎にバリデーションが異なります。

こういうのって標準のバリデーションではなく
正規表現を使って、それぞれのバリデーション検証を行うのが正しいですか?

また、そのユーザーのバリデーションパターンを決めるのも第三者が
フォーム入力で決めていく形です。

どういう流れに持っていくのが一般的ですか?
0105132011/07/25(月) 14:01:51.45ID:IAHMsfps
>>100 のものです。
<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>
を
<% @vegetables = Vegetable.find(:all, :conditions=>[@condition]).each do |vegetable| -%>
としましたが、結果は同じでした。

@conditionが別に定義されているかも知れないので@cndなど別の変数にしたが結果は同じでした。

undefined method `%' for ["[\""]:Arrayというエラーはググッても1件も出てきません・・・。

当方Rails2.3.8です。

宜しくお願い致します。
0106nobodyさん2011/07/25(月) 16:34:48.91ID:???
>>105
Rails2.3.8で似たようなコードを書いてもエラーにはなりませんでした。
そもそも、[ "[\"" ] というlength=1の配列はどこから来ているのかが気になりますね。

@conditionの定義部分でタイポとかないでしょうか?
0107132011/07/25(月) 16:45:54.91ID:IAHMsfps
>>106
vegetables_controller.rbに
if params[:hinmoku_id]
@cnd = []
@cnd << ["[ \""]
@cnd << ["hinmoku = ? "]
end
と、直書きしてます。

でも@cnd << ["[ \""]を削っても、
undefined method `%' for ["hinmoku = ? "]:Array
となって同じでした。
0108nobodyさん2011/07/25(月) 16:53:52.10ID:???
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
としたいんですよね。
であれば、<< ではなくて、+= じゃないですかね。

controllerで、
logger.debug @cnd.inspect
や
viewで
<%=h @cnd.inspect %>
で見てみると、@cndが2重配列になっていると思います。
0109nobodyさん2011/07/25(月) 17:22:43.37ID:???
>>107
と、根本的なところですが、Viewでfindとかを書くのはあまり推奨されないので、
こんな感じでリファクタリングしていくと良いかなと思います。

Rails2.3.4から標準で入っているnamed_scopeと
named_scopeをデフォルトで色々定義してくれるsearchlogicというpluginを使って
https://github.com/binarylogic/searchlogic

1回目のリファクタリング
[controller]
search = Vegetable
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
@vegetables = search.all
0110nobodyさん2011/07/25(月) 17:24:50.46ID:???
>>109 続き
このままだとcontrollerが肥大化してしまうので、modelに回します。
2回目のリファクタリング
[controller]
@vegetables = Vegetable.search(params).all

[model]
class Vegetable
def self.search(params={})
search = self
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
search
end
end
0111nobodyさん2011/07/25(月) 17:26:08.12ID:???
>>110 続き で、3回目のリファクタリングで
modelのメソッドをArrayのinjectと、文字列からメソッド発行ができるsendを使ってスリムに
[model]
class Vegetable
def self.search(params={})
[:hinmoku_id, :kaikyu_id, :kikaku1_id, :kikaku2_id].inject(self){|search, param| params[param].blank? ? search : search.send("#{param}_eq",params[param]) }
end
end

動作未検証ですが、参考までに。
0112132011/07/25(月) 17:42:26.98ID:IAHMsfps
>>108
<%=h @cnd.inspect %>
でみると、
["\"", "hinmoku = ? ", "and kaikyu = ? ", "and kikaku1 = ? ", "and kikaku2 = ?", "\"", ", '", "バナナ", "'", ", '", "2L秀", "'", ", '", 5, "'", ", '", "個ネット", "'"]
になってました。

でも、"とか\を取ると、それはそれで動かなくなるんですが、
根本的に記載方法を間違えているのでしょうか???
0113nobodyさん2011/07/25(月) 17:58:46.67ID:???
そもそも何で"\""を配列に入れようとしているのか…
>>100 を素直に代入すればいいだけだと思うが…
0114132011/07/25(月) 17:58:53.48ID:???
>>109
書き込み気付きました。
のちのちのメンテを考えるときれいにしときたいので、
頂いたアドバイスをもとに頑張ってみます
0115nobodyさん2011/07/25(月) 17:59:48.06ID:???
>>112
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
になるようにゴリゴリ書けば、
@cnd_first = []
@cnd_last = []

[hinmoku]
@cnd_first << "hinmoku = ?"
@cnd_last << "タマネギ"
[kaikyu]
@cnd_first << "kaikyu = ?"
@cnd_last << "L"

@cnd = [@cnd_first.join(" and ")] + @cnd_last

でいけるかな
0116132011/07/25(月) 18:01:29.60ID:???
>>113
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
を再現するように、
["を書くために"[\""て書きました。
0117nobodyさん2011/07/25(月) 18:05:55.04ID:???
あぁ…全部文字列だと思ってたのね…

Rail がどーたら言う前に、Ruby を勉強した方がいいよ
その方が問題解決にはずっと近道だし、今後似たようなことで悩まなくてよくなるから
0118nobodyさん2011/07/25(月) 18:17:18.52ID:eJ//7zAn

テッチャン☆ぶろぐ: [Rails]searchlogic v2でテーブルのソート的なもの。
http://shasou.blogspot.com/2010/02/railssearchlogic-v2.html

スリムになったSearchlogic v2をいじってみた - MothProgのうしろがわ
http://d.hatena.ne.jp/mothprog/20090819/1250692210

https://github.com/binarylogic/searchlogic
http://asciicasts.com/episodes/176-searchlogic
0119nobodyさん2011/07/25(月) 18:46:03.06ID:G/8niHgC

students = Student.scoped_by_name_and_grade("Ana", 2).all
ttp://d.hatena.ne.jp/mothprog/20090819/1250692210
0120nobodyさん2011/07/25(月) 18:51:27.50ID:eJ//7zAn
Searchlogic
http://railscasts.com/episodes/176-searchlogic

Episode 111: Advanced Search Form
http://railscasts.com/episodes/111-advanced-search-form

Make searching and ordering data in your application trivial
https://github.com/binarylogic/searchlogic
0121nobodyさん2011/07/26(火) 11:05:09.95ID:???
ログイン系のプラグインでCaptchaが標準でついてるのはないのかな?
0122nobodyさん2011/07/26(火) 11:54:53.75ID:???
ログインとCaptchaって意味ないと思うが…
サインアップなら分かるが
0123nobodyさん2011/07/26(火) 12:05:05.74ID:???
>>122
サインアップ機能(ログイン機能つき)でCaptcha付きのことです
0124nobodyさん2011/07/26(火) 12:17:22.22ID:???
>>121
このへん?
https://github.com/plataformatec/devise/wiki/How-To:-Use-Recaptcha-with-Devise

Google の Recaptcha を使うようだが
0125nobodyさん2011/07/26(火) 12:31:51.33ID:QroQWCDs
[Rails]Rails+MySQLで文字セット照合順序(collation)を変更する | DENPA GROOVE
http://jokami.mydns.jp/2011/05/25/railsrailsmysqlで文字セット照合順序(collation)を変更する/
0126nobodyさん2011/07/26(火) 12:40:36.04ID:???
>>124
これって、ただのキャプチャ単体ですよね?
探してるのはキャプチャが組み込まれているログイン管理・新規登録機能プラグインです。
0127nobodyさん2011/07/26(火) 12:57:27.97ID:???
>>126
よく嫁
そのページはdeviseという認証機能プラグインのプロジェクトの中にあるだろ
0128nobodyさん2011/07/26(火) 13:08:32.65ID:???
「それはラジオよ。」

友達のおばちゃんに言われた。

0129nobodyさん2011/07/26(火) 13:54:41.22ID:QroQWCDs

reCAPTCHA: Stop Spam, Read Books
http://www.google.com/recaptcha

Google Acquires reCAPTCHA
http://mashable.com/2009/09/16/google-acquires-recaptcha/
0130nobodyさん2011/07/26(火) 14:01:13.57ID:QroQWCDs
ambethia/recaptcha - GitHub
https://github.com/ambethia/recaptcha
0131nobodyさん2011/07/26(火) 14:38:52.54ID:???
deviseはサインアップ時の確認画面がないのがちょっと
0132nobodyさん2011/07/26(火) 14:40:49.73ID:???
だったら自分で作れ
0133nobodyさん2011/07/26(火) 14:51:18.42ID:???
作ったけど何か?
0134nobodyさん2011/07/26(火) 17:19:42.49ID:QroQWCDs
rails searchlogic plugin search in multiple columns - ruby-on-rails - DoExpert
http://www.doexpert.net/a/4e1754e4592b0a27c02867dc

http://b.hatena.ne.jp/t/searchlogic?sort=eid
0135nobodyさん2011/07/26(火) 21:29:54.59ID:???
しかし、確認画面って日本独特なんだろうね。
サインアップで間違っても、編集ページで直せば良いじゃん。ってことなんだろつ。
0136nobodyさん2011/07/27(水) 22:35:28.41ID:ZS4k7BV+
Slim - A Fast, Lightweight Template Engine for Ruby  
http://slim-lang.com/
0137nobodyさん2011/07/28(木) 09:43:39.08ID:???
http://designpatternsinruby.com/
ここ、開けないんだけどなんでだろ?
本のサンプル落としたいのに・・・・。

0138nobodyさん2011/07/28(木) 12:05:30.82ID:???
rails2.x
rails3.x

それぞれでの
主流のログイン認証プラグインとgemって何がある?
出来れば今もサポートされてるので。
0139nobodyさん2011/07/28(木) 12:08:05.40ID:???
>>138
http://ruby-toolbox.com/categories/rails_authentication.html
0140nobodyさん2011/07/28(木) 23:53:05.56ID:4Q9csvAm
O'Reilly OSCON Java 2011, Raffi Krikorian, "Twitter: From Ruby on Rails to the JVM"
 http://www.youtube.com/watch?v=ohHdZXnsNi8
0141nobodyさん2011/07/29(金) 00:13:17.03ID:Tkg/4Pbb
vigetlabs/simplest_auth - GitHub
https://github.com/vigetlabs/simplest_auth
0142nobodyさん2011/07/29(金) 02:46:50.92ID:Tkg/4Pbb


Githubにソースコードがあったらボタン1つでデプロイすることが出来る。
http://www.ninxit.com/blog/2011/07/28/python-flask-fluxfle/

One Click Install Software Library
WordPress 3.1.3 (Japanese)
Redmine 1.2-stable
http://www.fluxflex.com/library

fluxflex ドキュメント
http://jp.doc.fluxflex.com/

http://www.youtube.com/watch?v=iyqWyZVXl6g
0143nobodyさん2011/07/29(金) 15:17:50.97ID:NreIb2ba
既存のレコードをeditで編集し変更した内容を
submitボタンを2つにしてそのままupdateと新規insertにしたい。

もしくはレコードのコピー+idの採番

をしたいのですが、どうやったら可能でしょうか?
0144nobodyさん2011/07/29(金) 15:31:54.32ID:Tkg/4Pbb
高トラフィックサイトをRailsで構築するためのTips基礎編
http://www.slideshare.net/kaznum/railstips

Gregg PollackとScaling Railsのハウツー
1つには、Railsアプリケーションをうまくスケーリングするために必要なすべての情報をRails開発者に与えること。
開発者は、これらの技術を使用する必要はないかもしれません。
しかし、できれば、開発者がビデオを見て、何百万人の同時ユーザーを扱うRailsアプリケーションを
作成できます、とクライアントに言える自信を持ってもらいたいのです。
2番目に、Railsアプリケーションをスケーリングすることがどれほど簡単かを、他の言語の開発者に示すこと。
http://www.infoq.com/jp/articles/gregg-pollack-scaling-rails

Ruby Proxies for Scale, Performance, and Monitoring
http://www.slideshare.net/igrigorik/ruby-proxies-for-scale-performance-and-monitoring-gogaruco-igvitacom-1396734

osc2008_opensuse-moonlinx.pdf (application/pdf オブジェクト)
Perlbal
http://blog.geeko.jp/wp-content/uploads/2008/09/osc2008_opensuse-moonlinx.pdf
0145nobodyさん2011/07/29(金) 17:33:27.53ID:NreIb2ba
143です。
もしくは、indexのshow | edit | destroyにcopyとつけても良いです。

試しにlink_to '複製', new_vegetable_path(vegetable)としたら
真っ白になりました・・・。
0146nobodyさん2011/07/29(金) 19:43:08.17ID:Tkg/4Pbb
Rails アプリを nginx の拡張モジュールで置き換えて高速化する方法 - HeartRails Tech Blog
毎秒 1000 アクセスはクリア。CPU の使用率は 25% 前後
http://techblog.heartrails.com/2011/01/rails-nginx.html
0147nobodyさん2011/07/29(金) 19:50:18.37ID:Tkg/4Pbb
Apacheに対するDOS攻撃を回避する「mod_evasive」 (ひるねこ日記)
http://www.aubetec.com/hiruneko/blog/archives/2007/05/apachedosmod_evasive.html

mitukiii.jp | UbuntuのApacheにDOS攻撃を回避するmod_evasive入れた
http://mitukiii.jp/2010/12/19/ubuntu-apache-install-mod-evasive/

Apache DoS攻撃対策 mod_evasiveインストール | Satake Studio Developer's Blog
sudo apt-get install libapache2-mod-evasive
http://dev.satake7.net/2010/05/05/apache-dos攻撃対策-mod_evasiveインストール/

http://blog.bodhizazen.net/linux/how-to-mod_evasive-ubuntu-904/
0148nobodyさん2011/07/29(金) 21:08:00.14ID:JxuS3wyn
>>143
submitに名前を付けておいて受け取った側で識別、
createとupdateを呼び分ける。
0149nobodyさん2011/07/30(土) 01:02:16.68ID:???
>>145
copyの方がviewの無理がないので、自分ならそっちにします。

newに飛ばしても当然ダメなので、controllerにmethod追加かな。
0150nobodyさん2011/07/30(土) 01:18:55.43ID:K7JH1lDj


O'Reilly OSCON Java 2011, Raffi Krikorian, "Twitter: From Ruby on Rails to the JVM"
http://www.youtube.com/watch?v=ohHdZXnsNi8

OpenFeintジェイソン・シトロンCEOに独占インタビュー/Tech総研
ちなみに、僕らのプラットフォームは、Ruby on Railsで開発されています。
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001896

Airbnb: Which programming languages does Airbnb use? - Quora
http://www.quora.com/Airbnb/Which-programming-languages-does-Airbnb-use?

Inside Groupon: RailsConf 2011 - O'Reilly Conferences, May 16 - 19, 2011, Baltimore, MD!
http://en.oreilly.com/rails2011/public/schedule/detail/17691

Hulu is built on Ruby on Rails.
http://techcrunch.com/2008/01/24/hulu-discusses-private-beta-suggests-public-launch-time-frame/

http://ruby50.com/
0151nobodyさん2011/07/30(土) 07:35:59.46ID:K7JH1lDj
21 Ruby Tricks You Should Be Using In Your Own Code
http://www.rubyinside.com/21-ruby-tricks-902.html

19 Rails Tricks Most Rails Coders Don't Know
http://www.rubyinside.com/19-rails-tricks-most-rails-coders-dont-know-131.html
01521432011/07/30(土) 13:14:39.45ID:4R4YZGj/
>>149
[view]のindexに、show | edit | destroyにcopyを追加
link_to 'copy', vegetable, :action => :copy, :method => "POST"

[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])

# respond_to do |format|
# format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
# format.xml { head :ok }
# end

respond_to do |format|
format.html { render :action => "index" }
format.xml { render :xml => @vegetables }
end
end

[error]
白い画面に
Unknown action
No action responded to 11. Actions: copy, create, destroy, edit, index, new, search, show, and update
とでて動きません・・・。
0153nobodyさん2011/07/30(土) 13:57:37.37ID:jkxkSy7w
>>152

RESTルーティング書いた?

resources :vegetables do
member do
post :copy
end
end

と書くと、 copy_vegetable_url(id) or copy_vegetable_path(id) を使って
/vegetables/:id/copy に POST できるとおもう。
01541432011/07/30(土) 14:44:49.60ID:4R4YZGj/
>>153
route.rbに以下を書いていました。
map.connect 'vegetables/copy', :controller => 'vegetables', :action => 'copy'

頂いたコードを記入しましたが、動きません。当方Rails2.3.8です。
0155nobodyさん2011/07/30(土) 15:02:20.15ID:jkxkSy7w
2系だったか。

エラーメッセージをよく見ると、copy はアクションの一覧にあるな。
でもって 11 がアクションだと見なされているように見える。

link_to 'copy', vegetable, :action => :copy, :method => "POST"
は、
link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post'
だろうか、と思ったが、link_to(=アンカー要素)でPOSTって出来るの?
3系のUnobtrusive JavsScriptを使った奴は裏でformをつくってそこからPOSTしてくれるけど。

あと、とりあえず rake routes。

0156nobodyさん2011/07/30(土) 15:06:04.33ID:jkxkSy7w
2だと、 link_to_remote を使ってAJAXでPOSTするのかな。
01571432011/07/30(土) 15:17:12.42ID:4R4YZGj/
rake routes忘れてました・・・。実行しました。

あと、indexの記述を頂いた↓にしました。
link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post'

エラーは、↓になりました。
ActiveRecord::RecordNotFound in VegetablesController#copy
Couldn't find Vegetable with ID=1989628

このIDはなんぞ?レコード数は、まだ15です。
01581432011/07/30(土) 15:20:40.70ID:???
教則本(Head First Rails)が2.3系だったので、VPSに入ってたのを
わざわざダウングレードして使ってるんです。rubyも1.8.7だし。
これから覚え始めるのなら3系の1.9が良かったのかも・・・。
01591432011/07/30(土) 16:30:59.00ID:4R4YZGj/
143です。いろいろ試したところ、
link_to 'copy', :action => :cppy, :id => :vegetable.id, :method => 'post'
を
link_to 'copy', :action => :copy, :id => vegetable.id, :method => 'post'
とvegetable.idの前の「:」を取ったらエラーがなくなりました。
が、複製は動きません。

indexの「copy」のリンクは下記が生成されています。
http://127.0.0.1:3000/vegetables/copy?id=10&method=post

コントローラは下記です。
[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])

respond_to do |format|
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
end
end
0160nobodyさん2011/07/30(土) 16:51:22.80ID:jkxkSy7w
# :vegetable は typo でした。

rake routes は実行すること自体にdb:migrateのように意味があるわけではないので、
出力に意図する規則が定義されているかを確認したのでなければやった意味がない。
vegetables/copy という規則はあるのかな?

01611432011/07/30(土) 17:28:27.49ID:4R4YZGj/
出力の規則の定義ですか?

indexに足された1レコードが増えて再レンダされればいいという感じで、
respond do でそのままindexを実行するように書いているつもりです。
(デフォルトのdef deleteのコピペですが)
01621432011/07/30(土) 17:44:47.80ID:???
つづけざますみません。
下記のようにしたら、空のレコードがinsertされるようになりました。
あと少しっぽいのですが・・・。
respond_to do |format|
if @vegetable.save
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
else
format.html { render :action => "index" }
format.xml { render :xml => @vegetable.errors, :status => :unprocessable_entity }
end
end
0163nobodyさん2011/07/30(土) 18:38:07.83ID:jkxkSy7w
params[:id] が取れさえすれば、対応するレコードをDBから引っ張ってきて、
同じ情報でnewして保存するだけだよね?

0164nobodyさん2011/07/31(日) 17:33:31.50ID:hcUrE+vc
Code review: Ruby and Rails idioms ? giant robots smashing into other giant robots 
http://robots.thoughtbot.com/post/8135270582/code-review-ruby-and-rails-idioms
0165nobodyさん2011/07/31(日) 19:05:07.22ID:hcUrE+vc
Twitter: From Ruby on Rails to the JVM
http://ontwik.com/rails/oreilly-oscon-java-2011-raffi-krikorian-twitter-from-ruby-on-rails-to-the-jvm/

Odeo内で始めた小さなプロジェクトが「Twitter」だ。
Ruby on Railsを使って2週間で最初の動くバージョンを作り上げたという。
http://www.atmarkit.co.jp/news/200711/16/twitter.html

0166nobodyさん2011/07/31(日) 23:53:14.26ID:jRRlvPfa
プログラム板から移動してきました。

Railsで複数のデータベースに接続するときはどうすればいいのでしょうか?

ただし、条件として、
1.AのデータベースもBのデータベースもスキーマは一緒。だからクラスも同一のものを使う。
2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。
3.複数のデータベースへは同時に接続します。つまり現在のリクエストで一つのデータベースにしか
接続しないということではなく、一つのリクエスト内で複数のデータベースに接続します。

のが前提です。

やりたいことは、あるデータベースに入っているデータを
他のデータベースに移すような処理と考えてください。
0167nobodyさん2011/08/01(月) 00:23:29.68ID:???
世間的にはoctopusが人気。
http://ruby-toolbox.com/categories/activerecord_sharding.html
↑に載ってないのだとmulti_dbというのもある。
https://github.com/schoefmax/multi_db

それぞれ癖があるので使えそうなのを使ってくれ。
なお、本番にいきなり適用すると危ないので
テストを十分に行ってから。
0168nobodyさん2011/08/01(月) 00:40:35.36ID:???
>>167
やっぱりコアではない他の何かを使うことになるんですね。

しかし、なんで複数のデータベースを同時に使うような
設計になってないのでしょうか?

これ、Railsだけじゃなくて他のフレームワークも同じ気がします。
(たしかCakePHPやPerlのCatalystも同じような設計だった)

モデルの共通情報(実質グローバル変数)としてコネクションがモデルと一体化されており、
たしかにモデルを使う分にはコネクションを指定せずに楽かもしれないですが
そのせいで複数のデータベースを同時に使えない。そのような設計にしか見えないです。

データベース接続とモデルは分離するのが正しい設計だと思うのですが・・・
この設計に問題があると言ってる人はいないんでしょうか?
そういう人の話を聞いてみたいです。
0169nobodyさん2011/08/01(月) 00:46:56.09ID:???
うーん。octopusって先にymlに使用するデータベースを
複数定義しておくものなのかなぁ?

> 2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。
があるから、それができないんだよね。

もしかしたら別にやり方ある?
まあもうちょっと調べてみるけど。
0170nobodyさん2011/08/01(月) 01:42:47.30ID:???
Django最強
0171nobodyさん2011/08/01(月) 02:09:59.78ID:???
>>168
RailsのActiveRecordはその名の通りActiveRecordパターンなので、
データベース接続とモデルを一体化させることでシンプルにORMを実現している。
いうなれば世のウェブアプリの95%のケースを簡単にするために5%は切り捨てているわけ。
トレードオフの問題だよ。


正しいかどうかで言えば、「データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。」という設計は正しいの?
0172nobodyさん2011/08/01(月) 03:54:32.50ID:alQ6X3qm
Commit History for rails/rails - GitHub
https://github.com/rails/rails/commits/master
0173nobodyさん2011/08/01(月) 08:15:04.01ID:???
ActiveRecordでその要件を満たすちょうどいいプラグインとか、定石はちょっと思い付かないな。
コネクションを都度切り替えるとか、DB分だけ大元のクラスを継承してそれぞれ別DBを指すようにするとか、泥臭いやり方ならいくつかあると思う。
二層コミットなんて期待できないから大変だと思うが。

まぁ、他のやつらもいってる通り、その設計はそもそも正しいのか。その設計がなんのために必要なのかが気になる。
0174nobodyさん2011/08/01(月) 08:21:04.77ID:???
負荷分散のためにマスターDBを複数に分散。ユーザIDによって接続先が変わる。
これが簡単にできればいいんだけどね。

どの有名フレームワークにもデフォルトではこんな機能は付いてないから
役立たずなプラグインに頼るか自前で強引にねじ込むしかないんだよね。

当然、Railsではエレガントに実装することが出来るんでしょ??
■ このスレッドは過去ログ倉庫に格納されています