Rails 如何在 Rails4 里设置 nested resourced?

foxzool · 2013年08月14日 · 最后由 Rei 回复于 2013年08月14日 · 1972 次阅读

使用rails4.0 在routes里设置

resources :shops do
  resources :products
end

在使用scaffold生成的product controller里

# POST /products
# POST /products.json
def create
  @product = Product.new(product_params)

  respond_to do |format|
    if @product.save
      format.html { redirect_to @product, notice: 'Product was successfully created.' }
      format.json { render action: 'show', status: :created, location: @product }
    else
      format.html { render action: 'new' }
      format.json { render json: @product.errors, status: :unprocessable_entity }
    end
  end
end


private
def product_params
   params.require(:product).permit(:name, :shop_id, :price)
end

问题: 默认通过Product.new(product_params)生成的@product变量, 当redirect_to @product 时, 默认是跳转product_path。我需要将其跳转为shop_product_path。

所以,如何正确的设置product_params?

共收到 4 条回复
namespace :shop do
  resources :products
end

1楼 -1

明显楼主是要保留 nested resources 的嘛 /shops/1/products/122 用 namespace 就变成了 shop/products/122

其实楼主的问题我也想知道答案。。

这貌似跟product_params一点关系都没有吧……

def create
    @shop = Shop.find params[:shop_id]
    @product = @shop.products.new(product_params)

    respond_to do |format|
      if @product.save
        format.html { redirect_to shop_product_url(@shop, @product), notice: 'Product was successfully created.' }
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册