我有两种模式:
class Project < ActiveRecord::Base
has_many :stories, class_name: 'ProjectStory'
end
class ProjectStory
belongs_to :project
end
使用以下路线:
resources :projects do
resources :stories
end
所有控制器都已正确设置。现在,我有一个stories/_form
部分(可以重新用于new和edit),其中包含以下行:
= form_for [@story.project, @story] do
问题是,@story.model_name.singular_route_name
返回project_story
,因此它正在尝试执行project_project_name_path
来计算表单网址。这显然是在提高no method error
。
我可以使用url
选项覆盖它,但是我需要使用三元运算符来处理edit
和new
个案:
= form_for @story, url: @story.new_record? ? project_stories_path(@story.project) : project_story_path(@story.project, @story)
有没有办法让rails知道它应该为嵌套路由的单个元素使用不同的名称?我宁愿不重命名我的模型或控制器(以避免像edit_project_project_story_path
那样恼人的网址助手)