我有一个允许用户发布更新的表单。用户发布更新后,我希望刷新更新列表。为了实现这一点,我使用Ajax和jQuery并使用Rails。我在试图让jquery渲染部分帖子时遇到了麻烦。
这是我正在使用的jquery
$(".microposts").html("<%= j render partial: 'shared/feed_item', collection: @feed_items %>")
目前,Feed只是刷新并且什么也没显示。我相信这是由于我试图传递@feed_items的方式。传递该变量的最佳方法是什么?
有人要求控制器;
class MicropostsController < ApplicationController
before_action :signed_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
else
@feed_items = []
flash[:error] = "Failed to create micropost!"
render 'static_pages/home'
end
end
def destroy
@micropost.destroy
flash[:success] = "Micropost deleted!"
redirect_to root_url
end
private
def micropost_params
params.require(:micropost).permit(:content)
end
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end
end
答案 0 :(得分:0)
@feed_items
需要在控制器中的某处定义。 @
是Ruby中的一个特殊符号,表示当前类的实例变量。如果您在其他地方定义它,它将成为 类的实例变量。
Rails有一些特殊的魔力可以使视图中的控制器的实例变量可用。如果它不是控制器上的实例变量,它就不会起作用。
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
@feed_items = @micropost.do_whatever_to_build_the_feed_items
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
else
@feed_items = []
flash[:error] = "Failed to create micropost!"
render 'static_pages/home'
end
end