我只想在没有视图的情况下执行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在PictureController中这个动作不需要视图?
我没有真正解决告诉rails的问题我不需要视图,我只是创建了另一个控制器,将方法放入其中,并告诉rails路由以匹配不喜欢的操作与match
调用。
我无法确定,但我认为resources :picture
文件中的routes.rb
存在问题......
但无论如何,谢谢你们! =)
答案 0 :(得分:25)
这样的东西?
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
答案 1 :(得分: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 %>
答案 2 :(得分:0)
最有可能的问题是,您是通过ajax请求来执行此操作。因此控制器正在寻找format.js
,但您尚未在块中指定该格式的响应。因此它正在沦为默认值。
尝试
format.js { render json: @picture }
您可能还需要告诉ajax请求期望json响应。