我有一个类别和产品型号,产品型号属于某个类别。目前,我在类别显示视图上有一个链接,该链接将用户带到新的产品表单,并将类别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
任何帮助都会受到赞赏,对不起,如果这有点不清楚的话。
答案 0 :(得分:1)
为什么不在你的新动作中添加一个条件来检查param的存在?
unless params[:category_id].present?
redirect_to somewhere
end