如何使用POST在Ruby on Rails中将参数从一个视图传递到另一个视图

时间:2011-01-11 02:19:16

标签: ruby-on-rails

我觉得这应该是一件容易理解的事情,但我很难过。

我在Project的实例变量中有一个名为ID的值。我想将该值传递给新的“照片”页面,以将创建的每张照片与该特定项目相关联,但我不希望项目的ID显示在可见的查询字符串中。

我尝试过使用link_to和button_to,但是(我怀疑)因为我在路线中使用“资源:照片”,所有来到照片#new的请求都被解释为GET而不是POST。

Helllllllllllllllp!

感谢任何可以给我一些见解的人,在过去的一两个小时里,我一直在为此而自杀。

- 标记

1 个答案:

答案 0 :(得分:1)

在Rails中执行此操作的常用方法是创建一个匹配此类网址的路由:/projects/4/photos/new。做其他事情取决于你,但Rails让你很容易做到这样的事情。有关routes in Rails 3的更多信息,请参阅。

您在routes.rb中的条目应如下所示:

resources :projects do
  resources :photos
end

然后在app/controllers/photos_controller.rb中,您可以在“新照片”表单页面中找到它:

def new
  @project = Project.find_by_id(params[:project_id])
end

这是app/views/photos/new.html.erb中提交的表单提交的操作:

def create
  @project = Project.find_by_id(params[:project_id])
  @photo = @project.photos.create(params[:photo])
end

当然,你需要在这里进行错误处理和验证,但这是它的要点。请记住,使用GET进行幂等(非状态变化)操作(例如GET /projects/4/photos),POST创建新事物(例如POST /projects/4/photos)和{{1用于更新现有的东西(例如PUT)。