小编Tob*_*obi的帖子

ActiveRecord :: Migration的create_join_table的行为是什么?

我发现了一种在我的Rails应用程序中为HABTM关系生成连接表的好方法.

rails g migration CreateJoinTable table1 table2
Run Code Online (Sandbox Code Playgroud)

这会生成一个ActiveRecord::Migration采用该方法的方法create_join_table

我想知道这个奇妙的神秘方法是做什么的.我猜它会使一个表(可能没有id字段)有一个table1外键列和一个table2外键列,但该表是否还有其他功能?我对连接表的习惯一直是在这两列中添加唯一索引,以便table1中的记录和table2中的记录之间的关系不能输入两次.

我的问题归结为:如果我使用create_join_table,我需要继续添加该唯一索引,或者这种方法是否适合我(我认为它应该)?

我通常看文档并没有涉及这种细节.

activerecord ruby-on-rails jointable

9
推荐指数
2
解决办法
4684
查看次数

实现多选框

我的理解是Materialise不支持样式化的多选框 - 您必须指定浏览器默认值而不使用Materialize样式.(如我错了请纠正我)

因此,我尝试使用下拉列表中的复选框与Materialize下拉列表等效,如下所示:

<a class='dropdown-button btn-flat' href='#' data-activates='topics_dropdown' data-hover="true">
Relates to topics...</a>
<ul id='topics_dropdown' class='dropdown-content'>
    <li>
      <input type="checkbox" name="report[topics][409928004]" id="report_topics_409928004" value="1" />
      <label for="report_topics_409928004">Engagement</label>
    </li>
    <li>
      <input type="checkbox" name="report[topics][669658064]" id="report_topics_669658064" value="1" />
      <label for="report_topics_669658064">Appraisal</label>
    </li>

    <!-- etc. -->

</ul>
Run Code Online (Sandbox Code Playgroud)

但是如何渲染它会有一个小问题.文本和框向下偏移半行,因此突出显示悬停效果会突出显示一个与两个不同选项重叠的矩形.有没有办法纠正这个故障?

这是一个截图.它与上面的示例代码不同,但它是相同的dropdown-checkbox结构.

截图

css dropdownbox materialize

7
推荐指数
1
解决办法
3064
查看次数

gRPC 套接字在具有入口的 kubernetes 上关闭

我有一个在本地机器上运行良好的 gRPC 服务器。我可以从 python 应用程序发送 grpc 请求并获得正确的响应。

我把服务器放到了一个 GKE 集群中(只有一个节点)。我在集群前面有一个普通的 TCP 负载均衡器。在此设置中,我的本地客户端能够从某些请求中获得正确的响应,但不能从其他请求中获得正确响应。我认为是 gRPC 流不起作用。

我认为这是因为流媒体需要一个需要 SSL 的 HTTP/2 连接。

我在 GKE 中获得的标准负载均衡器似乎不支持 SSL,所以我按照文档设置了一个支持 SSL 的入口负载均衡器。我正在使用 Lets-Encrypt 证书。

现在所有 gRPC 请求都返回

status = StatusCode.UNAVAILABLE

详细信息 = "套接字关闭"

debug_error_string = "{"created":"@1556172211.931158414","description":"从对等 ipv4 收到错误:ip.of.ingress.service:443", "file":"src/core/lib/surface/call. cc", "file_line":1041,"grpc_message":"套接字关闭","grpc_status":14}"

IP 地址是我的入口服务的外部 IP 地址。入口 yaml 如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rev79-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "rev79-ip"
    ingress.gcp.kubernetes.io/pre-shared-cert: "lets-encrypt-rev79"
    kubernetes.io/ingress.allow-http: "false" # disable HTTP
spec:
  rules:
  - host: sub-domain.domain.app
    http:
      paths:
      - path: /*
        backend:
          serviceName: sandbox-nodes …
Run Code Online (Sandbox Code Playgroud)

sockets kubernetes grpc kubernetes-ingress

6
推荐指数
1
解决办法
1719
查看次数

Google Compute Engine 实例会休眠吗?

我想使用 SparkleShare 在计算机之间同步文件,因此我正在寻找一种让 git 存储库在线保存文件的方法。

我正在考虑使用 Google Compute Engine 来托管它们。如果我只为实际进行同步的时间付费,会便宜很多。

Google 计算引擎实例在不使用时是否会休眠(就计费而言),还是我必须 24/7 付费才能使用它?

google-compute-engine

5
推荐指数
1
解决办法
1587
查看次数

从同一应用程序中调用时内容提供者的权限拒绝

我只有一个应用程序。它有一个未导出的内容提供程序(我不希望其他应用程序访问该内容)我一直成功使用该内容提供程序直到现在。

我创建了一个内容观察者来更新TextViewonChange当内容更改并尝试重新查询该内容时,将调用该方法。那时它会收到如下所示的安全异常:

java.lang.SecurityException: Permission Denial: 从 pid=0, uid=1000 读取 org.sil.lcroffline.data.DataProvider uri content://org.sil.lcroffline/users/by_account_name/5555544444 需要导出提供程序,或grantUriPermission()

这是生成它的代码:

@Override
public void onChange(boolean selfChange, Uri uri) {
    Cursor c = null;
    try {
        c = mContentResolver.query(UserEntry.buildUserPhoneUri(mAccount.name), null, null, null, null);
        // do stuff with the data in the cursor
    } finally {
        if (c != null) c.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

URI 看起来格式正确,我认为在内容提供程序中匹配它没有问题。

当从应用程序内以编程方式调用时,上面的代码工作正常,只有当它被观察到的数据的变化触发时才会发生异常。

我怎样才能从同一个应用程序中获得许可拒绝,我该如何解决这个问题?

看清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.sil.lcroffline">

    <!-- To communicate with LCR -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> …
Run Code Online (Sandbox Code Playgroud)

security android android-contentprovider

4
推荐指数
1
解决办法
1423
查看次数

rspec `descripted_class` 是 `nil`

Rails 6.0.0.beta3

rspec 3.8.0

我刚刚安装rspec-rails在我的 Rails 应用程序上。我运行rails g rspec:install并生成了它spec/spec_helper.rbspec/rails_helper.rb.rspec 唯一改变的是取消注释spec_helper中的建议设置

我用来gruf运行 gRPC 服务器,而不是普通的 HTTP 服务器。

我还安装了gruf-rspec打算用它来测试我的 gruf 控制器。

我的 gruf 控制器遵循app/rpc/controllers/users_controller.rbgruf 文档。编译后的 protobuf 文件也位于app/rpc/users_services_pb.rb

这是控制器的类签名:

require 'users_services_pb'
require_relative 'permission_helper'

class UsersController < Gruf::Controllers::Base
  bind ::Sil::Rev79::Users::Service
  ...
end
Run Code Online (Sandbox Code Playgroud)

我的问题是在我的测试中described_classnil

这是我的测试

# spec/rpc/users_contollers_spec.rb

require 'rails_helper'
require 'users_services_pb'

RSpec.describe 'UsersController' do

  describe 'list_users' do
    it 'succeeds' do
      expect(described_class).not_to be_nil
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

测试失败。

为什么是 …

rspec ruby-on-rails grpc ruby-on-rails-6

4
推荐指数
1
解决办法
936
查看次数

插入记录时,Postgresql 对主键的唯一冲突

在带有 Postgresql 的 Rails 4.2 中,尝试保存新的 ActiveRecord 对象时出现此错误

PG::UniqueViolation:错误:重复键值违反唯一约束“My_table_name_pkey”

看起来它正在尝试使用已经存在的主键将记录插入到表中。我该如何解决这个问题?

postgresql ruby-on-rails

2
推荐指数
1
解决办法
1336
查看次数