【问题标题】:Add params to URL on render rails将参数添加到渲染轨道上的 URL
【发布时间】:2015-08-26 04:57:02
【问题描述】:

在控制器上渲染视图时是否可以向 url 添加参数? 在这里,我尝试在 url 上添加 tab=2。所以我的新 url 看起来像 localhost:3000/organizations/new?tab=2

我尝试了以下代码

render 'organizations/new', tab: 2

但它既不更改 URL 也不在 URL 上添加参数,它只是呈现视图。

我也试过render 'organizations/new?tab=2' 它抛出ActionView::MissingTemplate

编辑 1

这是我的组织/new.html.erb 代码

    <!-- START PAGE CONTAINER -->
<div class="page-container page-navigation-top-fixed" id="organization-new">
  <!-- PAGE CONTENT -->
  <%= render 'shared/navigation' %>
  <div class="page-content">
    <%= render 'shared/header' %>
    <!-- PAGE CONTENT WRAPPER -->
    <div class="page-content-wrap">
      <div class="row">
        <div class="col-md-12">
          <div class="panel panel-default tab-panel">
            <div class="panel-body">
              <div class="tab-container" id="tabs">
                <ul class="nav nav-tabs" role="tablist">
                  <li class="active">
                    <a href="#tab-1" data-toggle="tab">
                      <%= t('admins.create_organization') %>
                    </a>
                  </li>
                  <li class="disabled">
                    <a href="#tab-2" data-toggle="tab" class="disabled">
                      <%= t('organization.add_profile') %>
                    </a>
                  </li>
                </ul>

                <div class="org tab-content">
                  <div class="tab-pane fade in active" id="tab-1">
                    <h3></h3>
                    <%= render 'organizations/add_edit_org_form' %>
                  </div>
                  <div class="tab-pane fade" id="tab-2">
                    <h3></h3>
                    <%= render 'organizations/add_business_profile_tab' %>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- END PAGE CONTENT WRAPPER -->
    <%= render 'shared/footer' %>
  </div>
  <!-- END PAGE CONTENT -->
</div>
<!-- END PAGE CONTAINER -->

这是我在第一个选项卡上呈现的“组织/add_edit_org_form”部分

    <%= form_for (@organization), html: {class: 'form-horizontal organization-form', id: 'add_edit_organization'} do |f| %>
    <div class="form-group">
      <%= f.label(:name, t('organization.label_name'), class: 'col-md-3 col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.text_field(:name, class: 'form-control', organization_id: @organization.id) %>
        <span class="org-error-block text-danger text-danger" id="organization_name_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:abbreviation, t('organization.label_abbr'), class: 'col-md-3 col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.text_field(:abbreviation, class: 'form-control', organization_id: @organization.id) %>
        <span class="org-error-block text-danger text-danger" id="organization_abbreviation_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:organization_type, t('organization.label_type'), class: 'col-md-3
      col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.select(:organization_type, options_for_organization_type, {}, class: 'form-control select') %>
        <span class="org-error-block text-danger text-danger" id="organization_type_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:primary_currency, t('organization.label_primary_currency'), class: 'col-md-3 col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.select(:primary_currency, options_for_primary_currency, {}, class: 'form-control select') %>
        <span class="org-error-block text-danger text-danger" id="organization_primary_currency_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:status, t('organization.label_status'), class: 'col-md-3 col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.select(:status, options_for_status, {}, class: 'form-control select') %>
        <span class="org-error-block text-danger text-danger" id="organization_status_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:country_id, t('organization.label_country'), class: 'col-md-3 col-xs-12
      control-label') %>
      <div class="col-md-4 col-xs-12 select-country-options">
        <%= f.select(:country_id, options_for_countries, {}, class: 'form-control select') %>
        <span class="org-error-block text-danger text-danger" id="organization_country_id_error"></span>
      </div>
    </div>
    <div class="form-group">
      <%= f.label(:payment_method_id, t('organization.label_payment_method'), class: 'col-md-3 col-xs-12 control-label') %>
      <div class="col-md-4 col-xs-12">
        <%= f.select(:payment_method_id, options_for_payment_methods, {}, class: 'form-control select') %>
      </div>
    </div>
    <div class="panel-footer">

      <button class="btn btn-primary ajax-spinner pull-right">
        <%= t('organization.label_submit') %>
        <span class="fa fa-floppy-o fa-right"></span>
      </button>
      <i class="fa fa-spinner fa-pulse fa-2x pull-right"></i>
    </div>
<% end %>

这是我在第二个选项卡上呈现的另一个部分“组织/add_business_profile_tab”

<%= form_for (@business_profile), html: {class: 'form-horizontal', id: 'add_business_profile', multipart: true} do |f| %>
<div class="form-group">
  <label class="col-md-3 col-xs-12  control-label"><%= t('business_profile.upload_your_logo') %></label>
  <div class="col-md-4 col-xs-12 ">
    <div class="image-frame" id="upload_logo_div">
      <%= image_tag 'upload.jpg', class: 'image-frame', id: 'logo_image' %>
    </div>
    <%= f.file_field(:logo, id: 'logo_upload_btn') %>
    <span class="org-error-block text-danger text-danger" id="logo_upload_btn_error"></span>
    <div id="date_picker_container"></div>
  </div>
</div>
<div class="form-group">
  <%= f.hidden_field(:organization_id, value: @organization.id, id: 'organization_id') %>
  <%= f.label(:email, t('business_profile.email'), class: 'col-md-3 col-xs-12 control-label') %>
  <div class="col-md-4 col-xs-12">
    <%= f.text_field(:email, class: 'form-control', organization_id: @organization_id) %>
    <span class="org-error-block text-danger text-danger" id="business_profile_email_error"></span>
  </div>
</div>
<div class="form-group">
  <%= f.label(:address, t('business_profile.address'), class: 'col-md-3
  col-xs-12 control-label') %>
  <div class="col-md-4 col-xs-12">
    <%= f.text_field(:address, class: 'form-control') %>
    <span class="org-error-block text-danger text-danger" id="business_profile_address_error"></span>
  </div>
</div>
<div class="form-group">
  <%= f.label(:phone, t('business_profile.phone'), class: 'col-md-3 col-xs-12 control-label') %>
  <div class="col-md-4 col-xs-12">
    <%= f.text_field(:phone, class: 'form-control') %>
    <span class="org-error-block text-danger text-danger" id="business_profile_phone_error"></span>
  </div>
</div>
<div class="form-group">
  <%= f.label(:contact_person_name, t('business_profile.contact_person_name'), class: 'col-md-3 col-xs-12 control-label') %>
  <div class="col-md-4 col-xs-12">
    <%= f.text_field(:contact_person_name, class: 'form-control') %>
    <span class="org-error-block text-danger text-danger" id="business_profile_contact_person_name_error"></span>
  </div>
</div>

<div class="form-group ">
  <%= f.label(:registration_date, t('business_profile.registration_date'), class: 'col-md-3 col-xs-12
  control-label') %>
  <div class="col-md-4 col-xs-12">
    <%= f.text_field(:registration_date, class: 'form-control', autocomplete: 'off', value: @business_profile.registration_date.nil? ? '' : @business_profile.registration_date.strftime('%m/%d/%Y')) %>
    <span class="org-error-block text-danger text-danger" id="business_profile_registration_date_error"></span>
  </div>
</div>

<div class="form-group">
  <div class="col-md-4 col-xs-12">
    <%= f.hidden_field(:organization_id) %>
    <input type="hidden" value=<%= Date.today.strftime('%Y-%m-%d') %> name="today_date" id="today_date">
    <span class="org-error-block text-danger text-danger" id="business_profile_organization_id_error"></span>
  </div>
</div>

<div class="panel-footer">
  <button class="btn btn-primary pull-right">
    <%= t('business_profile.label_submit') %>
    <span class="fa fa-floppy-o fa-right"></span>
  </button>
</div>

注意

在成功和失败的情况下,我希望在表单提交后留在第二个选项卡上。

【问题讨论】:

  • 你能发布你的organizations/new.html.erb吗?
  • new.html.erb 中您使用的是form_for? @bipashant
  • @Prashant4020 是的,我正在使用 form_for
  • 那么请像这样使用&lt;% form_for @organization, path(@organization, :tab =&gt; 2) %&gt;
  • 请发布您的organizations/new.html.erb

标签: ruby-on-rails ruby-on-rails-4 rendering


【解决方案1】:

试试这个。

render 'organizations/new', :locals => {tab:2}

另一种解决方案: 在新组织链接上传递标签,如

link_to 'New Organization', new_organization_path(tab: 2)

这和你想要的完全一样

localhost:3000/organizations/new?tab=2

【讨论】:

  • 对不起,我没有这样做。
【解决方案2】:

通常当render 方法在控制器中执行时,它会在您的情况下解析目标视图模板organizations/new。它与更改 HTTP 请求 URL 和参数无关。

相反,你会这样做

form_for (@organization, url: organization_path(@organization, tab: 2) )

这将使请求完成后地址栏中的参数tab=2

另外,tab=2这个词好像不是固定的,它可能会在运行时改变,所以你可以使用jQuery来修改formaction属性就像

$('#target_form').attr('action', old_value + '?tab=2');

【讨论】:

  • 谢谢你又救了我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多