1

私はレールとプログラミングにかなり慣れていない、と言ってこれを前置きさせてください。

ブール属性のオンとオフを切り替えるためのリンクを作成しようとしています。私は基本的に、ネストされていないリソースで次のことを行うことでそれを行うことに成功しました。

ルート:

resources :my_resource do
 get 'toggle_attribute', :on => :member
end

コントローラ:

def toggle_attribute
  @resource = Resource.find(params[:id])
  @resource.toggle!(:attribute)
end

意見: <%= link_to "Toggle Resource", toggle_attribute_resource_path(@resource), :remote => true %>

まず、上で述べたように、これはネストされていないルートで機能しますが、コントローラーにどのソリューションを追加しようとしても、メッセージをフラッシュしたり、クリックしたときに何かにリダイレクトしたりするためのリンクを取得できません。ボタンを押しても何も起こらない場合は、変更を確認するために手動で更新する必要があります。

次に、次のようにネストされたルートでこれと同じ種類のものを機能させる方法がわかりません。

ルート:

resources :resource_1 do
resources :resource_2
end

誰かが私にいくつかのヒントを与えることができますか?

よろしくお願いします。このようなものが私をバタバタさせてきました。

4

1 に答える 1

1

を使用remote => trueすると、ajax 呼び出しを行うように指示されます。つまり、views フォルダーに toggle_attribute.js.erb ファイルを追加し、そのファイルで javascript を使用してリンク要素またはテキストを必要なものに置き換える必要があることを意味します。

respond_to :html, :jsまた、コントローラーの上部に設定して、js に応答するようにしてください。

repond_to :html, :js
def toggle_attribute
  @resource = Resource.find(params[:id])
  @resource.toggle!(:attribute)
end

toggle_attribute.js.erb :

$('#toggler').html("my new html here");

ビューで:

<%= link_to "Toggle Resource", toggle_attribute_resource_path(@resource), :remote => true, :id => "toggler"%>

アップデート:

ネストされたルートについては、これを試してください:

resources :resource_1 do
  resources :resource_2 do
    member do
      get :toggle_attribute
    end
  end
end

あなたのパスは次のようになります:

toggle_attribute_resource_1_resource_2_path(@resource, @resource2)
于 2012-11-08T16:54:10.757 に答える