【问题标题】:Indicate to Rails controller which view called action向 Rails 控制器指示哪个视图调用了动作
【发布时间】:2015-07-10 06:13:23
【问题描述】:

我有两个视图提交类似的控制器创建操作,允许用户“跟踪”产品。单击“跟踪”按钮后,每个视图都会通过 remote: true 属性提交一个 AJAX 请求,并且 javascript 响应应该重新呈现调用它的相应部分。如何向我的 create.js.haml 脚本指示哪个视图调用了该操作,然后做出相应的响应?

代码:

部分#1

- if current_user.present? && current_user.tracked_products.include?( @media )
    %a.btn.btn-responsive.btn-thin.btn-color.red-bg{ href: main_app.price_tracker_path( current_user.price_trackers.where( product_id: @media.id  ).first, _method: :delete ), style: 'font-size: 1.2em', data: { method: :delete, remote: true } }
        -# %i.fa.fa-eye-slash
        Stop Tracking
- elsif current_user.present?
    %a.btn.btn-responsive.btn-thin.btn-color.brand-background-color-lavender{ href: main_app.modal_new_price_trackers_path( media_id: @media.slug ), style: 'font-size: 1.2em', data: { toggle: :modal, target: '#new_price_tracker' } }
        -# %i.fa.fa-eye
        Track It
- else
    %a.btn.btn-responsive.btn-thin.btn-color.brand-background-color-lavender{ href: '#', style: 'font-size: 1.2em', data: { toggle: :modal, target: '#login_modal' } }
        -# %i.fa.fa-eye
        Track It

部分#2

- if (tracker = current_user.price_trackers.active.where( product: product ).first).present?
    %a.btn-responsive.brand-color-white{ href: main_app.price_tracker_path( tracker, _method: :delete), data: { method: :delete, remote: true} }
        %i.fa.fa-check-circle
        Track
- else
    %a.btn-responsive.brand-color-white{ href: main_app.modal_new_price_trackers_path( media_id: product.slug), data: { toggle: :modal, target: '#new_price_tracker' } }
        Track

create.js.haml:

if (//some indicator here) {
$('#track-product-'+#{@product.id}).html("#{j render(partial: 'products/track_item_from_card', locals: {product: @product})}");
else {
$('#track-item-button').html("#{j render(partial: 'products/track_item')}"); }
}

$('#new_price_tracker').attr("aria-hidden", "true");
$('#new_price_tracker').attr("style", "display: none;");

【问题讨论】:

  • 似乎我需要一个类似于 hidden_​​field_tag 的东西,但需要链接而不是表单

标签: javascript jquery ruby-on-rails ajax partial


【解决方案1】:

在一个视图中你应该这样写。

== button_tag 'Save', :value => 'view1', :name => 'commit', :type => 'submit'

在第二个视图中

== button_tag 'Save', :value => 'view2', :name => 'commit', :type => 'submit'

然后在您的创建操作中检查 params[:commit] 以确定它是视图 1 还是视图 2。

【讨论】:

  • 我不确定这将如何与我当前的链接代码一起使用。你的意思是这样的吗? - else %a.btn-responsive.brand-color-white{ href: main_app.modal_new_price_trackers_path( media_id: product.slug), :value => 'view1', data: { toggle: :modal, target: '#new_price_tracker' } } Track
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2013-06-16
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多