9

ビューなしでレールアクションを実行したいだけです。

の「routes.rb」では

resources :pictures do
    member do 
        post 'dislike'  
    end  
end

の「PictureController.rb」では
、これは機能しません

def dislike
    @picture = Picture.find(params[:id])
    @like = Like.find(:user_id => current_user.id, :picture_id => params[:id])

    @like.destroy

    respond_to do |format|
        format.html { render :action => :show, :id => params[:id], notice: 'You don\'t  like this picture anymore.' }
        format.json { render json: @picture }
    end
end

これもしない

def dislike
    @picture = Picture.find(params[:id])
    @like = Like.find(:user_id => current_user.id, :picture_id => params[:id])

    @like.destroy

    respond_to do |format|
        format.html { redirect_to @picture, notice: 'You don\'t  like this picture anymore.' }
        format.json { render json: @picture }
    end
end

またはこれでも(ただし、これは私には当てはまりません。jsonおよびhtmlを介してユーザーにフィードバックが必要です)

def dislike
    @picture = Picture.find(params[:id])
    @like = Like.find(:user_id => current_user.id, :picture_id => params[:id])

    @like.destroy

    render :nothing => true
end

しかし、私はこのエラーメッセージを受け取り続けます:

ActionView::MissingTemplate: Missing template pictures/dislike, application/like with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

PicturesController のこのアクションがビューを必要としないことをレールに伝えるにはどうすればよいですか?

解決しました!

ビューが必要ないことをレールに伝える問題を実際に解決したわけではありません。別のコントローラーを作成し、メソッドをそこに入れ、嫌なアクションをmatch呼び出しと一致させるようにレールルーティングに指示しました。確かなことは言えませんがresources :picture、私のroutes.rbファイルに問題があったと思います...

とにかく、みんなありがとう!=)

4

3 に答える 3

26

このようなもの?

def dislike
    @picture = Picture.find(params[:id]
    @like = Like.find(:user_id => current_user.id, :picture_id => params[:id])

    @like.destroy

    render :nothing => true
end
于 2012-10-16T16:53:02.463 に答える
5

嫌いなアクションで別のコントローラーを作成しました:

def dislike
    @picture = Picture.find(params[:id])
    @like = Like.find(:user_id => current_user.id, :picture_id => params[:id])

    @like.destroy

    respond_to do |format|
        format.html { redirect_to :back, notice: 'You don\'t  like this picture anymore.' }
        format.json { render json: @picture }
    end
end

このアクションに一致するようにroutes.rbを変更しました。

match 'pictures/:id/dislike' => "likes#dislike", :via => :post

そして今嫌いへの私のリンクは

<%= link_to 'Dislike!', {:action => :dislike, :controller => :likes}, :method => :post %>
于 2012-10-17T01:46:08.503 に答える
0

ほとんどの場合、問題は ajax リクエストを介してこのアクションを実行していることです。したがって、コントローラーは を探してformat.jsいますが、ブロックでその形式の応答を指定していません。したがって、デフォルトに落ちています。

試す

format.js { render json: @picture }

json 応答を期待するように ajax 要求に指示する必要がある場合もあります。

于 2012-10-16T17:05:30.347 に答える