【问题标题】:Rails: Conditional path in form partialRails:部分形式的条件路径
【发布时间】:2015-04-30 18:30:01
【问题描述】:

我有两个新表单和编辑表单,我想提取到部分表单,但是,据我对 Rails 的初学者了解,它们需要不同的路径才能工作。

这是我的编辑表单:

<%= simple_form_for [@user, @wiki], url: user_wiki_path do |f| %>
  <%= f.input :title %>
  <%= f.input :body %>
  <%= f.submit class: "btn btn-success"  %>
<% end %>

这是我的新表格:

<%= simple_form_for [@user, @wiki], url: user_wikis_path, method: :post do |f| %>
  <%= f.input :title %>
  <%= f.input :body %>
  <%= f.submit class: "btn btn-success"  %>
<% end %>

我是否可以,如果可以,如何将它们组合成一个部分 _form.html.erb 有条件地指定路径?

当我现在尝试加入他们时,我在尝试编辑时收到以下错误:

No route matches [PATCH] "/users/32/wikis"

这些是我的路线:

                      Prefix Verb   URI Pattern                              Controller#Action
             users_index GET    /users/index(.:format)                   users#index
              users_show GET    /users/show(.:format)                    users#show
                    root GET    /                                        pages#index
        new_user_session GET    /users/sign_in(.:format)                 devise/sessions#new
            user_session POST   /users/sign_in(.:format)                 devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                devise/sessions#destroy
           user_password POST   /users/password(.:format)                devise/passwords#create
       new_user_password GET    /users/password/new(.:format)            devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)           devise/passwords#edit
                         PATCH  /users/password(.:format)                devise/passwords#update
                         PUT    /users/password(.:format)                devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                  devise/registrations#cancel
       user_registration POST   /users(.:format)                         devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)                 devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                    devise/registrations#edit
                         PATCH  /users(.:format)                         devise/registrations#update
                         PUT    /users(.:format)                         devise/registrations#update
                         DELETE /users(.:format)                         devise/registrations#destroy
              user_wikis POST   /users/:user_id/wikis(.:format)          wikis#create
           new_user_wiki GET    /users/:user_id/wikis/new(.:format)      wikis#new
          edit_user_wiki GET    /users/:user_id/wikis/:id/edit(.:format) wikis#edit
               user_wiki PATCH  /users/:user_id/wikis/:id(.:format)      wikis#update
                         PUT    /users/:user_id/wikis/:id(.:format)      wikis#update
                         DELETE /users/:user_id/wikis/:id(.:format)      wikis#destroy
                   users GET    /users(.:format)                         users#index
                         POST   /users(.:format)                         users#create
                new_user GET    /users/new(.:format)                     users#new
               edit_user GET    /users/:id/edit(.:format)                users#edit
                    user GET    /users/:id(.:format)                     users#show
                         PATCH  /users/:id(.:format)                     users#update
                         PUT    /users/:id(.:format)                     users#update
                         DELETE /users/:id(.:format)                     users#destroy
                   wikis GET    /wikis(.:format)                         wikis#index
                    wiki GET    /wikis/:id(.:format)                     wikis#show
                 charges POST   /charges(.:format)                       charges#create
              new_charge GET    /charges/new(.:format)                   charges#new
                  charge PATCH  /charges/:id(.:format)                   charges#update
                         PUT    /charges/:id(.:format)                   charges#update

【问题讨论】:

    标签: ruby-on-rails ruby simple-form


    【解决方案1】:

    您可以将局部变量发布到部分中。像下面这样的东西会起作用:

    new.html.erb

    <%= render partial: '_form', locals: {url: user_wikis_path, method: :post} %>
    

    edit.html.erb

    <%= render partial: '_form', locals: {url: user_wiki_path(@user, @wiki), method: :post} %>
    

    _form.html.erb

    <%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
      <%= f.input :title %>
      <%= f.input :body %>
      <%= f.submit class: "btn btn-success"  %>
    <% end %>
    

    或者您可以将@url 和@method 设置为实例变量并以这种方式访问​​它们。

    控制器

    def new
      @method = :get
      @url = user_wikis_path
      ...
    end
    
    def edit
      @method = :post
      @url = user_wiki_path(@user, @wiki)    
      ...
    end
    

    _form.html.erb

    <%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
      ...
    

    或者您可以在访问当前操作的表单中设置条件,如果您在视图中使用 action_name,它将返回当前操作的名称。

    【讨论】:

    • 尝试了你的第一个代码,但我得到了错误:SyntaxError in WikisController#new /Users/hugocbp/Code/rails_apps/blocipedia/app/views/wikis/new.html.erb:1: syntax错误,意外的 tSTRING_BEG,期待 ')' ...ffer.append=( 渲染:partial '_form',locals: {url: user_wi ... ... ^ /Users/hugocbp/Code/rails_apps/blocipedia/app/ views/wikis/new.html.erb:1: 语法错误,意外 ',',期待 ')' ...pend=( render :partial '_form', locals: {url: user_wikis_pat ... ... ^我想试试你的最后一个选项,但我不知道如何......
    • 我在我的示例中看不到错误,尽管可能有错误,而且我无法很好地阅读您的错误消息。这是一种更好的方法。我将在我的示例中添加其他方法的说明
    • 啊 - 我在原始代码中发现了问题,第一个示例现在应该可以工作了
    【解决方案2】:
    # _form.html.erb    
    <%= simple_form_for @wiki do |f| %>
      <%= f.input :title %>
      <%= f.input :body %>
      <%= f.submit class: "btn btn-success"  %>
    <% end %>
    

    在您的 wikis#edit 和 wikis#new 上,添加

    ...
    @user = User.find params[:user_id]
    ...
    

    【讨论】:

    • 试过了...不幸的是我收到错误 No route matches [POST] "/wikis"...不过还是感谢您的帮助。
    • 这行得通。它给你 No route matches [POST] 错误,因为它嵌套在 User 模型下。您需要同时传递用户和 Wiki。 &lt;%= simple_form_for([@wiki.user, @wiki]) do |f| %&gt; 应该这样做。
    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多