页面has_many图像,如何让用户在表单中添加图像到此页面?

时间:2013-05-28 20:55:10

标签: ruby-on-rails

这与我的其他问题有些相关,但略有不同。

所以在每个页面上,我都有一个Add Image按钮,弹出一个带有表单的模态窗口,用于添加带有标题和描述的图像。但是,我不确定如何使它自动使用它所在页面的page_id。

目前的表格是:

<%= form_for @image do |f| %>

  <%= f.label 'Image URL:' %>
  <%= f.text_field :source %>

  <%= f.label :title %>
  <%= f.text_field :title %>

  <%= f.label :description %>
  <%= f.text_field :description %>

  <%= f.submit %>

<% end %>

有没有办法在创建图像时将image.page_id设置为该页面的id?

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套路线,因此在您的routes.rb中,您将拥有:

resources :pages do
  resources :images
end

然后你有url助手来创建一个添加链接:

<%= link_to 'add image', new_page_image_path(@page) %>

它会创建一个类似/pages/:page_id/images/new的路径,该路径被路由到控制器new的操作ImagesController,其中参数[:page_id]设置为@page.id

ImagesController中将新操作扩展到

def new
  @image= Image.new(page_id: params[:page_id])
end

并在表单中放置一个隐藏的page_id以在编辑期间保留它:

<%= form_for @image do |f| %>
  <%= f.hidden_field :page_id %>
  ...
  <%= f.submit %>
<% end %>

您可以使用任何JS将链接转换为显示图像格式的模型窗口。