两个模型轨道之间的冲突

时间:2013-10-01 20:34:43

标签: ruby-on-rails ruby-on-rails-3

我有两个模型postproduct

这是我的帖子控制器

before_action :seo_url,only: [:show]
def product_list
    if params[:product_id] == 1
      @products = Product.All
    end
    respond_to do |format|
      format.json { render json: @products.id }
    end
  end

private
def seo_url
    @post = Post.friendly.find params[:id]
  end

这是我的ajax电话

$.ajax({
    type: "GET",
    url: '/posts/product_list.json',
    data: {product_id: 1},
    dataType: 'json'
});

我的控制台抛出这样的东西。我无法理解任何人都可以提供帮助

Parameters: {"product_id"=>"1", "_"=>"1380659219433", "id"=>"product_list"}
  Post Load (0.9ms)  SELECT "posts".* FROM "posts" WHERE "posts"."slug" = 'product_list' ORDER BY "posts"."id" ASC LIMIT 1
Completed 404 Not Found in 5ms

ActiveRecord::RecordNotFound (ActiveRecord::RecordNotFound):
  app/controllers/posts_controller.rb:85:in `seo_url'

修改-1

Processing by PostsController#product_list as JSON
  Parameters: {"product_id"=>"1"}
Completed 500 Internal Server Error in 3ms

NoMethodError (undefined method `id' for nil:NilClass):

2 个答案:

答案 0 :(得分:1)

/posts/product_list被解释为“使用show”product_list“调用控制器中的id方法,而不是”调用product_list方法“。

这是因为您的config/routes.rb文件。您需要告诉它您的product_list方法。像这样:

resources :posts do
  get "product_list", on: :collection
end

答案 1 :(得分:0)

您的代码中有一些非标准概念。

您的问题的简单答案是无法找到id =“product_list”的帖子。我假设你已经从id更改了主键?

查看ActiveRecord文档 - http://guides.rubyonrails.org/active_record_querying.html#retrieving-a-single-object

长答案将涉及询问为什么RESTful get路由的id为“product_list”。我会重新访问http://guides.rubyonrails.org/routing.html并在继续之前仔细检查您的路线。