これはどのように設定して、コントローラのアクションについてのすべてです。どのようにあなたのものを使いたいのか分かりませんが、あなたの状況に適応できるはずのものを私が見せてくれる同様のケースがあります。
私の場合、セッション内の値を設定してメニューパネルを開いたり閉じたりすることができます。
まず、あなたが興味のある仕事をする予定のコントローラアクションが必要です。特定のビューや他のコントローラに属さないアプリケーション全体のものを処理する "SharedController"を作成しました。
class SharedController < ApplicationController
# Used by AJAX links to set various settings in shared views
def edit
session[:admin_menu] = params[:admin_menu].to_sym if params[:admin_menu]
session[:advanced_search] = params[:advanced_search].to_sym if params[:advanced_search]
render :nothing => true
end
end
このコントローラのアクションのいずれか、セッション中の2つのいずれかの値を設定することができる:「admin_menu」(論理値)または「advanced_search」(論理値)。次に、特定のビューは、admin_menuまたはadvanced_searchのセッション値がtrueかどうかを確認し、そうであればビューを表示します。
同じロジックを使用できます。何かのように:
このコントローラアクションをリンクで起動するには、GET要求を受け入れるルートが必要です。 edit
は論理的な選択です。
resource :shared, :only => [:edit], :controller => 'shared'
注:私はSharedController
がSharedsController
より理にかなっていると思うし、edit_shared_path
がedit_shareds_path
より理にかなっているので、私は私のroutes.rbをして:controller => 'shared'
を指定する必要がありました。
次に、paramsのあるURLへのリンクが必要です。経由
edit_shared_path(:key => 'value')
あなたのコントローラでこれらのparamsを取得できます:、あなただけのパスヘルパーに追加し、パス上にのparamsを追加するので、同じよう
:
params[:key]
はそうのように、このリンクを作ります
link_to 'Set Own to True for This Object', edit_shared_path(:object_id=>object.id, :own=>'true')
注:これは、AJAXを経由して、これを行うのがベストですので、を設定してください。 AJAXを使用しない場合は、このリンクがトリガーされた後に読み込まれるページのリダイレクトをコントローラで指定する必要があります。私の管理者メニューの嗜好リンクの場合は
、私は2つの可能な状態とのリンクが必要です。私はちょうどadmin_toggle_button
を使用して、これを呼び出すビューで
# Shows Admin Menu Button
def admin_toggle_button
if session[:admin_menu] == :on
link_to('Admin Tools', edit_shared_path(:admin_menu => :off), :remote=>true, :class => 'selected', :id => 'admin_toggle_button', :title => 'Hide Admin Menu')
else
link_to('Admin Tools', edit_shared_path(:admin_menu => :on), :remote=>true, :id => 'admin_toggle_button', :title => 'Show Admin Menu')
end
end
:私はこれらのヘルパーを使用して生成します。あなたは好きなことをすることができますが、オプションです。
質問がある場合は、正しい軌道に乗ることができたら幸いです。
EDIT:あなたのコメントに基づいて:
リンクの問題は、EDITアクションに行っているわけ要求をGET。参照:http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
さらに問題が発生すると、resource :shared
の代わりにresources :toys
(この目的のために使用しました)があります。これは、あなたのリンクヘルパーが、単一のリソースを扱うのではなく、特定のおもちゃが既に編集を期待していることを意味します。参照:http://guides.rubyonrails.org/routing.html#singular-resources
あなたのリンクは、あなたがするそれを変更した場合に動作します:
link_to 'Set Own', edit_toy_path(@toy, :owned=>'true'), :remote => true
...そして次にあなたのコントローラであなたのeditアクションを設定します。
def edit
@toy = Toy.find(params[:id])
@toy.owned = params[:owned]
if @toy.save!
head :ok
else
head :internal_server_error
end
end
を参照してください:http://guides.rubyonrails.org/layouts_and_rendering.html#using-head-to-build-header-only-responses
本当にこれはAJAXリンクでのみ行うべきであり、通常は "実際の"コントローラでは行わないことに注意してください。理由は、これがEDITで処理できる唯一のアクションであるため、通常のtoys#edit
ビューは機能しなくなります。あなたがすることによって、たとえば、新しいアクションと新しいルートを作成するには、この問題を回避することができます
:
resources :toys do
member do
get 'set_ownership'
end
end
はその後、単純に上記と同じ方法を取るとset_ownership
の代わりedit
それを呼び出します。 IE:
class ToysController < ApplicationController
...
def set_ownership
...
end
end
すべてが意味をなされることを願っています。
下記の更新された回答。 – Andrew