通过jquery使用集合更新rails部分

时间:2014-05-24 18:23:42

标签: javascript jquery ruby-on-rails ajax

我有一个允许用户发布更新的表单。用户发布更新后,我希望刷新更新列表。为了实现这一点,我使用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

1 个答案:

答案 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