在Rails 4上,我无法从控制器中的URL获取params。
我有两个带有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中的ActiveRecord :: RecordNotFound #create - 无法 找到没有ID的书“
我这样做完全错了吗?我知道Rails 4改变了params的工作方式,这与获取URL参数的语法相同,所以也许这就是造成这个问题的原因。
编辑:我也尝试将“new”中的参数作为变量,然后将其用作id,但我得到相同的错误消息。
答案 0 :(得分:0)
new_page_path将在此处调用GET的'new'操作。它不会像您期望的那样调用“创建”操作。理想情况下,您想要调用“创建”操作。试试这个:
button_to 'Create Page', pages_path(:book => @book.id), :method => :post
link_to通常只应指向GET操作。对于这样的事情,用户button_to是首选。
答案 1 :(得分:0)
我认为你正在寻找(注意:id而不是:book):
<%= link_to "Create page", new_page_path(:id => @book.id), :id => "submit-button" %>
然后将您的create方法更新为:
def create
@book = Book.find(params[:id])
...
end