9

我只想在没有视图的情况下进行 Rails 操作。

在我的'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]}.

我应该如何告诉 rails PicturesController 中的这个动作不需要视图?

解决了!

我并没有真正解决告诉 rails 我不需要视图的问题,我只是创建了另一个控制器,将方法放入其中,并告诉 rails 路由将不喜欢的操作与match调用相匹配。我不能确定,但​​我认为这是resources :pictureroutes.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 }

您可能还需要告诉 ajax 请求期待 json 响应。

于 2012-10-16T17:05:30.347 回答