Ajax Rails 4中的JSON不包含对象的所有字段

Ajax Rails 4中的JSON不包含对象的所有字段,ajax,json,ruby-on-rails-4,Ajax,Json,Ruby On Rails 4,我在控制器中没有动作 def index if UserDatum.find_by_user_id(current_user.id) == nil redirect_to new_user_datum_path end @journal = Journal.new authorize! :read, @journals if params[:date] @journals = Journal.all.where("user_i

我在控制器中没有动作

def index
    if UserDatum.find_by_user_id(current_user.id) == nil
      redirect_to new_user_datum_path
    end

    @journal = Journal.new

    authorize! :read, @journals

    if params[:date]
      @journals = Journal.all.where("user_id = #{current_user.id} and DATE(created_at) = DATE('#{params[:date]}')").order("created_at DESC")
      @date = params[:date]
      return
    end

    @journals = Journal.all.where("user_id = #{current_user.id} and DATE(created_at) = DATE('#{Time.now}')").order("created_at DESC")

  end
当我用param“date”调用它时,它必须返回JSON(我使用AJAX)。但这里是我的JSON:

Object {id: 5, user_id: 31, systolic: 185, diastolic: 75, url: "http://localhost:3000/journals/5.json"} application.js?body=1:72
Object {id: 4, user_id: 31, systolic: 110, diastolic: 70, url: "http://localhost:3000/journals/4.json"} application.js?body=1:72
Object {id: 3, user_id: 31, systolic: 125, diastolic: 85, url: "http://localhost:3000/journals/3.json"} application.js?body=1:72
Object {id: 2, user_id: 31, systolic: 130, diastolic: 90, url: "http://localhost:3000/journals/2.json"} application.js?body=1:72

它必须包含“创建时”和“压力类型”字段。但是,当我尝试调用它们时,js返回“未定义”。

有几件事需要提及

  • 根据请求参数决定输出类型是不可靠的。Rails为应用程序中的所有路由提供了
    请求格式。因此,您需要使用
    respond_to
    块来定义输出。像这样

    respond_to do |format|
      format.html { @journals = Journal.all.where("user_id = #{current_user.id} and DATE(created_at) = DATE('#{Time.now}')").order("created_at DESC") } 
      format.json { 
        @date = params[:date] || Time.now #set the default value just in case nothing was sent
        @journals = Journal.all.where("user_id = #{current_user.id} and DATE(created_at) = DATE('#{@date}')").order("created_at DESC")
      }
    
    不要忘记,这个JSON将由
    /journals提供。JSON
    在AJAX调用中正确设置它

  • 要正确格式化JSON输出,您需要正确设置
    index.JSON
    视图。通过调用
    render json:@journals
    ,cource yu可以直接从控制器操作呈现这些日志,但是视图要灵活得多。为了定制JSON视图,我更喜欢使用序列化工具,如
    jbuilder
    (已经随Rails提供)。因此,在您的
    app/views/journals
    目录中打开
    index.json.jbuilder
    视图,并在其中放置如下内容:

    json.array! @journals do |journal|
      json.(journal, :id, :user_id, :systolic, :diastolic, :url, :type_of_pressure, :anything_else_you want)
    end  
    
    有关更多选项和功能,请查看


  • 你能告诉我确切的错误是什么吗?