我有一个在我的主页面上进行部分渲染的功能。如果直接从其中一个链接调用该方法,则该方法有效。方法如下:
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中进行部分渲染。
答案 0 :(得分:1)
您的错误确实是ajax中的from django.db.models import Case, Value, When
queryset.update(active=Case(
When(active=True, then=Value(False)),
When(active=False, then=Value(True)),
))
类型与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
元素并替换它。