从另一个方法ActionController :: UnknownFormat调用时,部分渲染不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从另一个方法ActionController :: UnknownFormat调用时,部分渲染不起作用相关的知识,希望对你有一定的参考价值。
我有一个功能,在我的主页上进行部分渲染。如果直接从其中一个链接调用该方法,则该方法有效。方法如下:
def show_card
@activity = Activity.find(params[:id])
respond_to do |format|
format.js
end
end
我需要从另一个方法调用此方法,或者至少呈现此方法呈现的相同内容,但使用不同的参数。我的第二种方法是这样的:
def like_activity
@user = current_user
@activity = Activity.find(params[:id])
@user.like_activity!(@activity)
all = Activity.all
notWanted = Activity.where(id: Activity.joins(:memberships).where({ "memberships.user_id" => current_user.id})).or(Activity.where(id: Activity.joins(:likes).where({"likes.user_id" => current_user.id}).where.not("likes.user_likes_activity" => nil)))
queue = all - notWanted
nextActivity = queue.first()
redirect_to action: 'show_card', controller: 'pages', id:nextActivity.id
end
基本上,在您喜欢某个活动之后,该方法应该调用show_card并显示新活动。但是,我收到以下错误:
ActionController的:: UnknownFormat
虽然这是我在控制台上输出的输出:
> Redirected to http://localhost:3000/pages/show_card?id=88 Completed
> 302 Found in 99ms (ActiveRecord: 59.6ms)
>
>
> Started GET "/pages/show_card?id=88" for 127.0.0.1 at 2018-03-01
> 17:12:35 -0800 Processing by PagesController#show_card as html
> Parameters: {"id"=>"88"} User Load (6.5ms) SELECT "users".* FROM
> "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2
> [["id", 2], ["LIMIT", 1]] Activity Load (6.3ms) SELECT
> "activities".* FROM "activities" WHERE "activities"."id" = $1 LIMIT $2
> [["id", 88], ["LIMIT", 1]]
> Completed 401 Unauthorized in 23ms`
> (ActiveRecord: 12.8ms)
>
>
> ActionController::UnknownFormat (ActionController::UnknownFormat):
> app/controllers/pages_controller.rb:13:in `show_card'
我很遗憾我错过了什么。我也在使用Devise,我不知道这是否与401有关 - 未经授权。如果您对可能发生的事情有任何了解,如果您能告诉我,我们将非常感激。谢谢!
编辑:虽然我还没有想出来,但我认为问题是redirect_to是HTML格式,而格式是js。也就是说,我仍然没有想出如何在AJAX中进行局部渲染。
您的错误确实是ajax中的request
类型与controller respond_to
之间的不匹配。
你可以要求text/html
和你的render_to_string
直接action
,或者我通常喜欢做什么,要求application/json
,并有一个类似于这样的respond_to
:
def some_ajax_action
html = (render_to_string partial: 'some/partial/somewhere', locals: { something: @some_instance_variable_for_the_partial }, layout: false)
respond_to do |format|
format.json { render json: { string_partial: html, success: true } }
end
end
然后只需在前端挑选string_partial
元素并替换它。
以上是关于从另一个方法ActionController :: UnknownFormat调用时,部分渲染不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ActionController::TestCase 模拟 PayPal 购买
关于请求和响应:类ActionController::Base < Metal
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):将 JSON 参数发布到