form_for和scopes,rails 3

ive*_*rds 7 scope form-for ruby-on-rails-3

由于范围和rails 3中的form_for帮助器,我遇到了问题.路径 - 文件如下所示:

scope "(/:tab)" do
  resources :article
end
Run Code Online (Sandbox Code Playgroud)

表单看起来像这样:

<%= form_for(@article) %>
   <%= f.label :title %>
   <%= f.text_field :title %>
    etc.
<%end%>
Run Code Online (Sandbox Code Playgroud)

tab - 属性存储在params [:tab]中,作为一个字符串我的问题是,这会在表单中生成错误的url.我怎么能让这个工作?经过处理的url article_path(params [:tab],@ article)工作得很好

ive*_*rds 11

我想出的答案非常难看,但同时适用于更新和创建:

<%= form_for(@article, :url => (@article.new_record? ? 
    articles_path(params[:tab]) : article_path(params[:tab], @article) do |f| %>
Run Code Online (Sandbox Code Playgroud)

更新:更好的解决方案是将default_url_options方法覆盖为如下所示:

def default_url_options(options={})
  { :tab => params[:tab] }
end
Run Code Online (Sandbox Code Playgroud)

然后<%= form_for @article do | f | 可以使用%>,并且正确生成所有网址


Yan*_*nis 10

尝试:

<%= form_for [:tab, @article] do |f| %>
   <%= f.label :title %>
   <%= f.text_field :title %>
    etc.
<%end%>
Run Code Online (Sandbox Code Playgroud)