どうやら、replace_htmlなどを動作させるには、Named Routeを指定する必要があるようだ。
jquery-railsをインストールした環境で、こんなコードは動く。
def show
@item = Item.find(params[:id])
respond_to do |format|
format.js do
render(:update) do |page|
page.replace_html 'Change', "Okay!"
end
end
end
end
しかし、これは動かない。
def showitem
@item = Item.find(params[:id])
respond_to do |format|
format.js do
render(:update) do |page|
page.replace_html 'Change', "Okay!"
end
end
end
end
いずれも、ページ中のの中身を置き換えるだけのものだ。
show.html.erbで定義したリンクはこんな感じ。
showへのリンク: <%= link_to 'update', item_path(@mole), :remote => true %>
showitemへのリンク: <%= link_to 'update2', :action => 'showitem', :remote => true, :format => 'js' %>
showitemは、config/routes.rbでもこんな感じで定義
match 'items#showitem' => 'items#showitem'
こうすると、show.html.erbのソースは
update
update2
となる。
remote => trueが前者はちゃんとdata-remoteと認識されているのに対して、後者は、単なるパラメータになってしまっている。
後者は、リンクをクリックすると、javascriptが表示されるだけで、何も起こらない。
ここでずーっとはまったのだが、ふと、Named Routeを設定したらどうなるのか?と思い、やってみたら、うまく動いた。
route.rb
match 'items#showitem' => 'items#showitem', :as => 'showitem_item'
showitemへのリンク: <%= link_to 'update2', showitem_item_path, :remote => true %>
htmlのソース:update2
なにか間違えているからこうなるのかなあ。
Named Routeなしで同じことができるべきという気がするんだけど・・・
2 件のコメント:
<%= link_to 'hoge', {:action => 'showitem'}, :remote => true %>
とかで、いけないでしょうか?
コメントありがとうございます。
{}で囲まなければならないんでしたか。
うーん、そうだったんですね。
また試してみます。
コメントを投稿