使用按钮 Rails 更新模型字段

Update model field with button Rails

我的 Rails 5 项目中有一个消息传递系统,其中消息模型有一个 isread 字段来指示收件人是否已阅读消息。

我正在使用 bootstrap 模式查看消息,并希望消息的 isread 字段在模式关闭时更改为 true。

有人可以解释一下如何从 button_tag 中做到这一点,或者让控制器中的按钮标签调用方法来做到这一点吗?

类似于:

message.isread = true
message.save!

在我看来按下 "Close" 按钮时执行:

<div id="modal1<%= index %>" class="modal fade" role="dialog">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><%= message.subject %></h4>
      </div>
      <div class="modal-body">
        <p><%= message.content %></p>
      </div>
      <div class="modal-footer">
        <%= button_tag "Close", :class => "btn btn-default", "data-dismiss" => "modal" %>
      </div>
    </div>
  </div>
</div>

谢谢!

如果您希望通过单击按钮调用控制器中的方法,您需要首先捕获 javascript

中单击按钮的操作
$(".btn-default").click(function(){

});

然后你想Ajax调用控制器方法

$.ajax({
    url: "/message/update_is_read",
    type: "POST",
    data: {is_read: isRead},
    success: function(resp) {
        console.log(resp);  
    },
    error: function(resp) {
        console.log(resp);
    },
});

然后在你的控制器中用

捕捉它
def update_is_read
     is_read = params[:is_read]

end

确保将路径添加到路线

  post '/messages/update_is_read', to: 'messages#update_is_read', as: '/messages/update_is_read'

可以修改控制器代码保存

您可以在控制器中定义一个新操作,将属性 isread 更新为 true 并使用 button_to 辅助程序

#routes
resources :messages do
  post :is_read, on: :member
end  

#messages controller
def is_read
  @message = Message.find(params[:id])
  @message.update(isread: true)
  redirect_to ...
end

#view
<%= button_to "Close", is_read_message_path %>