在rails

时间:2016-12-10 21:32:11

标签: ruby-on-rails exception parameters strong-parameters

我有一个类别和产品型号,产品型号属于某个类别。目前,我在类别显示视图上有一个链接,该链接将用户带到新的产品表单,并将类别ID设置为用户链接链接的类别。

更清楚: 用户选择类别>用户点击类别显示视图上的新产品链接>打开产品表单,并将类别ID设置为上一个类别。

我遇到的问题是,如果用户转到/ products / new,则会抛出一个缺少参数的参数,因为找不到类别ID(看到一个类别没有与地址请求一起发送)。

有没有办法可以解决这个问题,以防止用户只是输入/ products / new地址并尝试访问表单?我想要的是,如果用户尝试创建新产品而不点击类别页面上的链接,则会将用户重定向到主页。

我的产品控制器代码(与此问题相关):

def new
    @product = @category.products.new
  end

def set_category
      @category = Category.find_by(id: params[:category_id]) || Category.find(product_params[:category_id])
      rescue ActiveRecord::RecordNotFound
    end

private
    def product_params
      params.require(:product).permit(:category_id, :title, :description, :image_url, :price)
    end

链接到类别显示页面上的新产品:

  %p= link_to t('.add'), new_product_path(category_id: @category)

异常指向的方法:

def product_params
    params.require(:product).permit(
        :category_id, :title, :description, :image_url, :price)
end

任何帮助都会受到赞赏,对不起,如果这有点不清楚的话。

1 个答案:

答案 0 :(得分:1)

为什么不在你的新动作中添加一个条件来检查param的存在?

unless params[:category_id].present?
  redirect_to somewhere
end