2011-07-30 9 views
1

特定の機能を追加するのに問題があります。私は購入/売り場で働いており、私は投稿を比較できるようにしたい。記事中レールに比較機能を追加

を表示:対応するコントローラで

<%= button_to "Add to Compare", :action => "addCompare" %> 

@@a = Array.new() 

def addCompare 
    @@a << Post.id 
end 

ので、私はやりたいすべてのアレイに投稿のIDを追加している、ここで私はこれまで持っているものです@@ a。私はこれをテストするとき、私はボタンを「比較対象に追加」をクリックすると、私はこれを歓迎しています:テンプレートは、テンプレートの投稿がありません

が欠落している

/addCompareと{:ロケール=> [:アン、: "/ home/mja32/470repo/traders/app/views"のビューパスには、次のように表示されます: 、 "/var/lib/gems/1.8/gems/devise-1.4.2/app/views"

私はそれがビューにリダイレクトしようとしていると思います。どのようにしてこれを防ぐのですか?このボタンがしたいのは、投稿のidを配列に追加するだけです。コントローラのクラス変数に永続的なデータを格納し、事前に

おかげで、

マットすべての

+0

'addCompare'、' @@a = Array.new() 'ewwww。それはルビーじゃない! –

+0

RubyとRailsの両方のチュートリアルを読む必要があります。 – tokland

答えて

3

まず、あなたはそれがしたいように動作するつもりはありません。 @@aが次のaddCompareコールで同じ配列になるという保証はありません。たとえば、次のaddCompareコールを別のプロセスで処理することができます。また、2つの異なるクライアントがaddCompareに電話をかけるとどうなりますか?あなたは本当に1つの山にそれらのデータを一緒にミックスしたいですか?おそらくそうではありません。最初の作業は、@@aを実際のユーザーごとの永続ストアに置き換えることです。それはする必要はありませんので、何かがすでにレンダリングされたレールを教えてくれます

render :nothing => true, :status => :ok 

あなたは自分のcontroller methodの終わりにこれを行う、あなたのコントローラから、全く何も返さないようにしたい場合既定のレンダリングアクション(ビューをレンダリングする)を試して、クライアントに200個以上のステータスコードを返します。

ができたら、おそらく、:remote => trueであなたのボタンをAJAXifyしたいと思う:

:remote - trueに設定すると、控えめなJavaScriptのドライバが提出する動作を制御することができます。デフォルトでは、この動作はajax submitです。

ので、この:

button_to(name, options = {}, html_options = {}) 

:actionoptionsのためですが、:remoteはそうあなたが明示的にハッシュを設定する必要がhtml_optionsためのものであること:

<%= button_to "Add to Compare", { :action => "addCompare" }, { :remote => true } %> 

button_toはこのようになっていること{};あなただけの中括弧でoptionsをラップすることができます:

<%= button_to "Add to Compare", { :action => "addCompare" }, :remote => true %> 

が、私は手でそれらの両方を包むの一貫性を好みます。

+0

thanks mu。あなたは良い点を持ち出す。私は、基本的な機能性を落とすことに心配していましたが、詳細についてはまだ考えていませんでした。申し訳ありませんが、私はばかげているが、私は上記のコード行を追加し、私は空白のページを取得します。私はそれが同じポストページにとどまりたいと思っています。 – Matt

+0

@Matt:申し訳ありませんが、その部分を逃し、私の更新をご覧ください。 –

+0

hmmmボタンをクリックしてもまだ空白のページがあります。 – Matt

関連する問題