【发布时间】:2013-06-04 19:40:14
【问题描述】:
在 Rails 4 上,我无法从控制器中的 URL 获取参数。
我有两个具有 has_many 和 belongs_to 关联的模型,我们称它们为 Books 和 Pages。我想创建一个新的 Page 记录并将其链接到 Book 模型,具体取决于用户单击“创建”按钮时正在访问的书籍(即,如果用户在侏罗纪公园书籍页面上并单击“创建, " 我想创建一个与侏罗纪公园图书相关联的新页面。
这是我认为的创建链接:
<%= link_to "Create page", new_page_path(:book => @book.id), :id => "submit-button" %>
这是我的控制器:
def new
@page = Page.new
end
def create
@book = Book.find(params[:book])
@page = Product.new(page_params)
@page.book_id = @book.id
if @page.save
flash[:success] = "Page Submitted!"
redirect_to @book
else
render 'new'
end
end
我收到以下错误:
“PagesController#create 中的 ActiveRecord::RecordNotFound - 无法 查找没有 ID 的书”
我这样做完全错了吗?我知道 Rails 4 改变了 params 的工作方式,这与获取 URL 参数的语法相同,所以也许这就是导致这个问题的原因。
编辑:我也尝试从 'new' 获取参数作为变量,然后将其用作 id,但我收到相同的错误消息。
【问题讨论】:
-
嗨。在 Rails4 中 strong_parameters 是默认值。因此,您应该允许您从 url 或表单中获得的每个参数。在您的情况下,您应该有一个
book_params并且这 book_params 可以与 find 一起使用。 -
@book = Book.find(book_params)underprivatein your controllerdef book_params params[:book].permit(:id, :name) end
标签: ruby-on-rails-4