[英]In Rails how can I tell in my AJAX JS file what button was clicked
在我的 Rails 应用程序中,我有一个视图 notify.html.erb 和多个 forms,它们是根据几个不同的模型动态创建的,例如 Child.rb 和 Friend.rb。
通知.html.erb
<% @user.children.order("created_at").each do |child| %>
<%= form_for(child, :method => :put, :remote => true)) do |f| %>
<div class="notify-name"><%= child.name %></div>
<%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
<%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
<% end %>
<% end %>
<% @user.friends.order("created_at").each do |friend| %>
<%= form_for(friend, :method => :put, :remote => true)) do |f| %>
<div class="notify-name"><%= friend.name %></div>
<%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
<%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
<% end %>
<% end %>
forms 设置为 remote => true 以便它们由 AJAX 处理。在每个 controller 更新操作中,我有:
children_controller.rb
def update
child = Child.find(params[:id])
email = params[:child][:email]
if child.update(child_params)
UserMailer.invite_new_user(current_user, child.name, email).deliver_later
respond_to do |format|
format.html { redirect_back(fallback_location: documents_path) }
format.js
end
end
end
在我的 update.js.erb 文件中,我希望能够 select 被点击的特定按钮。 但正如您在我上面的视图中看到的那样,这些按钮并没有什么独特之处(它们是根据用户拥有的孩子和朋友的数量动态创建的,并且它们每个都具有相同的类别)。 我怎样才能得到被点击的按钮,以便我可以更新那个按钮的值?
添加带有子 ID 的隐藏字段
<% @user.children.order("created_at").each do |child| %>
<%= form_for(child, :method => :put, :remote => true)) do |f| %>
<div class="notify-name"><%= child.name %></div>
<%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
<%= f.hidden_field :id, value: child.id %>
<%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
<% end %>
<% end %>
这将在参数中提交一个孩子的id
在 controller
def update
child = Child.find(params[:child][:id])
email = params[:child][:email]
if child.update(child_params)
UserMailer.invite_new_user(current_user, child.name, email).deliver_later
respond_to do |format|
format.html { redirect_back(fallback_location: documents_path) }
format.js
end
end
end
传递一个隐藏的文件,每个文件都用特定的值硬编码。 然后你可以看到那个参数
% @user.children.order("created_at").each do |child| %>
<%= form_for(child, :method => :put, :remote => true)) do |f| %>
<%= hidden_field_tag 'invitable_type', 'child' %>
<div class="notify-name"><%= child.name %></div>
<%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
<%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
<% end %>
<% end %>
<% @user.friends.order("created_at").each do |friend| %>
<%= form_for(friend, :method => :put, :remote => true)) do |f| %>
<%= hidden_field_tag 'invitable_type', 'friend' %>
<div class="notify-name"><%= friend.name %></div>
<%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
<%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
<% end %>
<% end %>
现在在你的update.js.erb
中你可以访问它
<% if params[:invitable_type] == 'friend' %>
// you js code to enable button for friend
<% elsif params[:invitable_type] == 'child' %>
// you js code to enable button for child
<% end %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.