3

基本的に、リンクを「お気に入り」から「削除済み」に動的に更新できるようにすると同時に、新しいボタンを再クリックして戻るオプションをユーザーに提供したいと考えています。ただし、ページを更新すると更新されたボタンが表示されるため、アクションは発生します。「このクラスをお気に入りに登録」リンクをクリックしても機能しないのはなぜですか? 「この教室を削除する」リンクが機能しているようです。ご協力いただきありがとうございます

お気に入り_コントローラー.rb:

  def create
    current_classroom.add_to_favorites(@classroom)
    current_classroom.save
    respond_to do |format|
      format.js {  }
      format.html {redirect_to @classroom}
    end
  end

  def destroy
    current_classroom.remove_from_favorites(@classroom)
    current_classroom.save
    respond_to do |format|
      format.js {  }
      format.html {redirect_to @classroom}
    end
  end

お気に入り/create.js.erb

$("#favorite_classroom").html("<%= escape_javascript(link_to 'Remove the Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete) %>");

教室/_classroom_details.html.erb

<div id="favorite_classroom">
<% if loggedin_user.favorite_classroom?(@classroom) %>
    <%= link_to 'Remove this Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete %>
<% else %>
    <%= link_to 'Favorite this Classroom', classroom_favorites_path(@classroom), :remote => true, :method => :post %>
<% end %>

ルート:

classroom_favorites POST   /classrooms/:classroom_id/favorites(.:format)  {:action=>"create", :controller=>"favorites"}
classroom_favorite DELETE /classrooms/:classroom_id/favorites/:id(.:format) {:action=>"destroy", :controller=>"favorites"}

「このクラスルームをお気に入りに追加」リンクをクリックするとエラーが発生する: ActionView::Template::Error (No route matches {:action=>"destroy", :controller=>"favorites"

ありがとう!

4

3 に答える 3

1

jsファイルで二重引用符を2回使用しています。あなたはそれをすることはできません。このように書き直す必要があります-

$("#favorite_classroom").html("<%= escape_javascript(link_to 'Remove the Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete) %>");

Remove the Classroomは、二重引用符ではなく一重引用符で囲まれていることに注意してください。

さらに、教室内にお気に入りをネストしているため、ルートが正しくありません。リンクを作成するときは、削除しようとしている@favoriteオブジェクトを追加する必要があります。

= link_to 'Remove Favorite', classroom_favorite_path([@classroom, @favorite]), :remote => true, :method => :delete

これで、アクセスしようとしているルートが有効になります。それはエラーを取り除くはずです。

于 2012-08-14T20:54:56.570 に答える
0

お気に入りのコントローラーは必要ないと思います。必要なのは、教室のコントローラーのお気に入り/お気に入りでないアクションです。これがどのように見えるかです

教室_コントローラー.rb

respond_to :html, :js

def favorite
  # ... find classroom by id
  # do your stuff
  @classroom.favorite = !@classroom.favorite
  respond_with(@classroom)
end

ビュー/クラスルーム/favorite.js.erb

<%# the message should be oposite to favorite %>
<% msg = @classroom.favorite ? "Remove this Classroom" : "Favorite this Classroom" %>
$("#favorite_classroom").html("<%= escape_javascript(link_to msg, [:favorite, @classroom], :remote => true) %>");

パス ヘルパーを使用したトリックは次の[:favorite, @classroom]とおり/classrooms/:id/favoriteです。うまくいかない場合は試してみてくださいfavorite_classrooms_path(@classroom)

最後に、 routes.rbに追加します。

resource :classrooms do 
  member { get :favorite }
end
于 2012-08-14T21:46:46.783 に答える
0

ルートを一致させるには、リンクで「favorite_id」を参照する必要があるようです。

あなたの場合、おそらく次のようになります。

classroom_favorite_path([current_classroom, @classroom])
于 2012-09-18T01:20:20.900 に答える