如何用button_to隐藏按钮?

时间:2019-02-09 12:32:02

标签: ruby-on-rails

我有一个索引页,并且在每一行上都放置了button_to。该按钮的任务是将行中的“用户名”内容发送到另一个表。我希望按钮在执行此操作后被隐藏,希望它从表中删除后再次可见。

我已经完成了发送数据的过程,但是我无法隐藏按钮。

#rad_accts_controller
def create
  @rad_acct = Banlist.new(rad_acct_params)

  respond_to do |format|
    if @rad_acct.save
      format.html { redirect_to @rad_acct, notice: 'Banlist was successfully created.' }
      format.json { render :show, status: :created, location: @rad_acct }
      format.js { redirect_to rad_accts_url }
    else
      format.html { render :new }
      format.json { render json: @rad_acct.errors, status: :unprocessable_entity }
      format.js { redirect_to rad_accts_url }
    end
  end
end

 def rad_acct_params
    params.permit(:username)
 end 



#rad_acct view index.html.erb
<% @rad_accts.each do |rad_acct| %>
   <tr class="gradeX">
    <td><%= rad_acct.username %></td>
    <td><%= button_to 'Ban', {:controller => "rad_accts", :action => "create", :username => rad_acct.username } , :method=>:post, data: { confirm: 'Are you sure?' }, remote: true  %></td>
   </tr>
<% end %>

当我按下按钮时,rad_accts表中的用户名将被复制到黑名单表中。但是,rad_acct索引页面上用于转移用户名的按钮不会消失。

当我从黑名单列表页面删除相应的用户名时,rad_acct索引页面上的按钮应该可见

我该怎么做?

谢谢

2 个答案:

答案 0 :(得分:0)

您在按钮中使用remote:true。这意味着该调用是通过javascript进行的。这也意味着对UI的任何更改也应通过Javascript处理。您可以在按钮上添加onclick处理程序,假设您使用jQuery:

$('button#id-of-button').on('click', function() {
   $(this).hide()
})

但这只是第一步,因为重新加载会导致按钮再次显示。因此,您还需要使按钮在您的视图中成为条件。由于我不知道您使用什么属性,因此我使用meta:

#rad_acct view index.html.erb
<% @rad_accts.each do |rad_acct| %>
   <tr class="gradeX">
    <td><%= rad_acct.username %></td>
    <td>
      <% if rad_acct.user_not_banned? %>
        <%= button_to 'Ban', {:controller => "rad_accts", :action => "create", :username => rad_acct.username } , :method=>:post, data: { confirm: 'Are you sure?' }, remote: true  %>
      <% end %>
    </td>
   </tr>
<% end %>

答案 1 :(得分:0)

激活的CSS类应该起作用。

.button:active {
   display: none;
}

活动类指的是已经单击的链接或标记。然后添加display:none;类的内容应该不可见。