问题:
ActionController::InvalidAuthenticityToken in Admin::ProductsController#create
解决方法:
在对应的Controller中加入skip_before_action :verify_authenticity_token
问题:
在REST服务中,是没有后缀的情况下时,没有办法匹配到Resource
解决方法:
class Product < ActiveResource::Base
self.site = "http://localhost:8080/"
self.include_format_in_path = false
end
问题:
undefined method product_path:
解决方法:
http://stackoverflow.com/questions/8706774/undefined-method-with-path-while-using-rails-form-for
get 'products/' => 'products#index'
get 'products/:id' => 'products#show', :as => :product
这样以后就可以使用类似product_path(@product)的方法来获取product对应的路径了
问题:
我们如何POST一个ActiveResource
解决方法:
http://apidock.com/rails/ActiveResource/Base
问题:
使用了ActiveResource来访问第三方提供的REST API,form_for(@product)的时候,会出现@product的错误提示信息
解决方法:
这是因为Rails本身并不知道你的Product这个Resource的定义,所以,方法就是自己写一个原始的HTML。但这里有另外一个问题需要我们注意,就是,我们在ProductsController里面创建或修改product的时候有这样的代码:
def product_params
params[:product]
end
表示获取Product这个对象,而我们看到这里要求的是product作为key,这就要求我们自己写的HTML类似于这个样子:
<input id="product_title" name="product[title]" type="text">
这样在params[:product]中就有了title这样一个属性
问题:
ActionController::UrlGenerationError in Admin::ProductsController#create
No route matches {:action=>"show", :controller=>"admin/products", :id=>nil} missing required keys: [:id]
if @admin_product.saveredirect_to admin_product_path(@admin_product)end
解决方法:
redirect_to admin_product_path(@admin_product.id),应该还有其他更好的解决办法吧
问题:
如何定义Subresource
解决方法:
require 'rubygems'
require 'active_resource'
class Pricing < ActiveResource::Base
self.site = "http://localhost:8080/products/:product_id"
self.include_format_in_path = false
belongs_to :product
end
class Product < ActiveResource::Base
self.site = "http://localhost:8080/"
self.include_format_in_path = false
has_many :prices
end
问题:
如何测试Subresource
解决方法:
class Admin::PricesControllerTest < ActionController::TestCase
test "should get index" do
get(:index, {:product_id => 1})
assert_response :success
assert_not_nil assigns(:admin_prices)
end