Ruby on rails Feedzirra表示,POST方法/创建操作对某些方法有效,但对其他方法无效

Ruby on rails Feedzirra表示,POST方法/创建操作对某些方法有效,但对其他方法无效,ruby-on-rails,post,controller,params,feedzirra,Ruby On Rails,Post,Controller,Params,Feedzirra,好的,我正在做一个JQuery。向服务器发送请求以插入一些数据。它有时只起作用,具体取决于Rails创建方法中的方法 具体情况如下。我有一个前端带有Backbone.js的Rails应用程序。在我的前端代码中,我提出了这个。post请求 $.post('/publications'); 看起来很简单。我有一个出版模型以及 resources :publications 在路由器里。现在,在我的发布控制器中,我将create方法扩展为以下内容: def create feed =

好的,我正在做一个JQuery。向服务器发送请求以插入一些数据。它有时只起作用,具体取决于Rails创建方法中的方法

具体情况如下。我有一个前端带有Backbone.js的Rails应用程序。在我的前端代码中,我提出了这个。post请求

$.post('/publications');
看起来很简单。我有一个出版模型以及

resources :publications
在路由器里。现在,在我的发布控制器中,我将create方法扩展为以下内容:

  def create
    feed = Feedzirra::Feed.fetch_and_parse(publication_params[:url])
    params = {:name => feed.title}
    @publication = Publication.new(params)

    respond_to do |format|
      if @publication.save
        format.html { redirect_to @publication, notice: 'Publication was successfully created.' }
        format.json { render action: 'show', status: :created, location: @publication }
      else
        format.html { render action: 'new' }
        format.json { render json: @publication.errors, status: :unprocessable_entity }
      end
    end
  end
Feedzirra是一个解析RSS提要的gem。当我像这样发出POST请求时,我从服务器日志中得到一个500(内部服务器错误)和这条消息

NoMethodError (undefined method `title' for {}:Hash):
  app/controllers/publications_controller.rb:28:in `create'


  Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (40.3ms)
  Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
  Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered /Users/ericabt1/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (54.7ms)
让我困惑的是,如果我选择了不同于“title”的方法,比如“entries”或“nil”,那么POST请求就可以正常工作。我知道“title”确实是一个方法,因为当我进入Rails控制台并创建一个TestFeedzirra对象并查看各种可用的方法时,我发现“title”就是其中之一

为什么我的帖子请求对其中一些方法有效,而对其他方法无效

*更新****

在接受了克拉比和亚历山大·佐洛特科的建议后,我开始玩FeedZirra正在回归的游戏。看起来像是排队的

feed = Feedzirra::Feed.fetch_and_parse(publication_params[:url])
正在返回一个空哈希

现在,当我在rails控制台中运行同一行并在其中硬编码一个url时,它将返回正确的哈希值,并且我能够获取标题和其他值。看来问题出在你身上

publication_params[:url]
仍在进行此项工作并接受建议:)

*更新第二部分*

我认为问题在于发布模型中没有url列。所以我做了适当的迁移。下面是模式:

  create_table "publications", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "url"
  end
回到我在底部的控制器:

 private
    # Use callbacks to share common setup or constraints between actions.
    def set_publication
      @publication = Publication.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def publication_params
       params.permit(:name, :url)
    end
发布参数[:url]仍返回nil。我也试过这句话:

params.require(:publication).permit(:url, :name)

在查看了
Feedzirra::Feed.fetch_and_parse
之后,我看到的唯一选项是您的
publication_参数[:url]
包含字符串以外的内容。在这种情况下,fetch_和_parse返回结果的散列(即使只传递了一个url)。请检查
publication\u params[:url]是否为?(字符串)
是否为真。

正如Alexander Zolotko指出的
Feedzirra::Feed.fetch\u and\u parse
似乎返回哈希值

举个例子

params = { :name => feed[:title] }
假设前端正确,REST资源发布在Rails后端正确设置

例如,控制器应如下所示:

def create
  # requesting the feed from passed url
  feed = Feedzirra::Feed.fetch_and_parse(publication_params[:url])

  # mapping feed keys to publication attributes
  feed_to_publication_hash = { :name => feed[:title], anything else }

  # instantiating new publication
  @publication = Publication.new(publication_params.merge(feed_to_publication_hash))
  ...
end

private

def publication_params
  params.require(:publication).permit(:url, everything else you need)
end
我很肯定,即使这样做有效,也不是一种好的做法。通常,您为对象定向而奋斗,在这种情况下,每个动作只有一个目的


但是我现在不知道如何重构,获取提要,也许映射散列。可能是控制器问题或类似问题。

返回false。当我对NilClass而不是String做相同的测试时,它返回true。这不再导致500错误。它创建了一个新的发布条目,但名称列中只有nil。请尝试找出是否需要并允许在params散列中使用url(假设您使用Rails 4的强参数)。这就是我所拥有的:'params.permit(:url,:name)'Try params.require(:Publication)。permit(:url,任何其他允许的内容)。你知道吗?我查看了发布模型的模式,现在我看到没有url列。我会试试的。通常也是这样简单:)