我觉得这应该是一件容易理解的事情,但我很难过。
我在Project的实例变量中有一个名为ID的值。我想将该值传递给新的“照片”页面,以将创建的每张照片与该特定项目相关联,但我不希望项目的ID显示在可见的查询字符串中。
我尝试过使用link_to和button_to,但是(我怀疑)因为我在路线中使用“资源:照片”,所有来到照片#new的请求都被解释为GET而不是POST。
Helllllllllllllllp!
感谢任何可以给我一些见解的人,在过去的一两个小时里,我一直在为此而自杀。
- 标记
答案 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
)。