小编xla*_*ash的帖子

Rails ActiveRecord :: StatementInvalid:PG ::错误:错误:缺少表的FROM子句条目

我有一个复杂的ActiveRecord查询,我正在构建不同的范围,具体取决于用户选择.我正在使用2个宝石,这似乎有问题,但我无法找到谁是罪魁祸首:Texticle(对于Postgresql全搜索)(2.0.3)Squeel(用于Active Record查询中的ruby语法)squeel(0.9. 5)Arel或Active Record本身

这是我的类定义:

class Event < ActiveRecord::Base
  belongs_to :entity, :class_name => "Entity", :foreign_key => :entity_id
  belongs_to :place, :class_name => "Entity", :foreign_key => :place_id

class Entity < ActiveRecord::Base
  has_many :events, :foreign_key => 'entity_id'
  has_many :events, :foreign_key => 'place_id'
Run Code Online (Sandbox Code Playgroud)

最后,我的查询:

Event.joins{entity.outer}.joins{place.outer}.includes(:place).includes(:entity).textsearch('anystring'.downcase)
Run Code Online (Sandbox Code Playgroud)

*这是一个ActiveRecord :: Relation对象,在使用to_a调用它时会崩溃

这给了我以下错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR:  missing FROM-clause entry for table "entities_events"
LINE 1: ... AS t1_r30, "entities"."metro_area_id" AS t1_r31, "entities_...
                                                             ^
: SELECT "events"."id" AS t0_r0, "events"."name" AS t0_r1, "events"."start_at" AS t0_r2, "events"."end_at" AS t0_r3, "events"."created_at" AS …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails arel squeel

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

Scapy - 如何解析以太网预告片字段

我正在使用F5 Networks Big-IP产品,这些产品附加了一个定制的Ethernet II拖车框架用于调试目的.我正在尝试用Scapy为这个预告片绑定一个新图层,但我无法这样做.

我可以在Padding字段中看到感兴趣的有效负载,但是使用bind_layers不能正确解析所需的Padding部分.

class MyEthTrailer(Packet):
    name = "Ethernet Trailer"
    fields_desc = [ ####Fields Mapping Section ]
    def dissect(self, s):
        self.payl,self.pad = self.extract_padding(s)
        s = self.do_dissect(self.pad)
Run Code Online (Sandbox Code Playgroud)

我想到的一个解决方案是创建一个新的以太网替换类(或过载),然后我可以参考典型的以太网有效载荷和我的新预告片.但我不是一个超级Python/scapy程序员,我不确定这是否是最佳选择.

这是我应用bind_layers(TCP,MyEthTrailer)后Scapy当前映射我的数据包的方式.我应该解析的信息是在Padding类中

<Ether  dst=00:00:00:00:00:00 src=00:00:00:00:00:01 type=0x8100 |<Dot1Q  prio=0L id=0L vlan=01L type=0x800 |<IP  version=4L ihl=5L tos=0x0 len=67 id=1 flags=DF frag=0L ttl=255 proto=tcp chksum=0x01 src=10.0.0.1 dst=10.0.1.1 options=[] |<TCP  sport=1111 dport=https seq=1 ack=1 dataofs=5L reserved=0L flags=PA window=4380 chksum=0xb718 urgptr=0 options=[] |<MyEthTrailer  |<Padding  load='\xPayload of MyEtherTrailer' |>>>>>>
Run Code Online (Sandbox Code Playgroud)

[UPDATE-1]

我可以通过调用强制解码TCP SYN数据包:

packet[TCP].decode_payload_as(MyEthTrailer)
Run Code Online (Sandbox Code Playgroud)

但是,bind_layers方法似乎不会自动运行,并且这不适用于更复杂的数据包,因为它将TCP Padding与MyEthTrailer有效负载混合在一起.

[UPDATE-2]

我得到了部分工作,但每个数据包都需要正确地进行转换,然后我可以读取预告片有效负载并对其进行解码.例如,如果数据包是TCP/DNS/MyEthTrailer,这将起作用.如果我不知道它是DNS,并且它没有正确设置,它仍然混合在TCP有效载荷和填充中.

非常感谢您的帮助.

python network-programming ethernet scapy f5

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

Bash编程:如何在不同的"shell"中运行程序,类似于CLI命令more | less等

我的目标是从我的主shell运行一个程序,然后清除屏幕,显示这个新清除的shell中的所有输出,直到我的程序退出.那时,我不想在我的屏幕历史中看到这个程序的所有输出.但我不想失去以前的历史.

清除,重置,清除&& printf'\ e [3J'不起作用.Subshel​​l保留历史记录,也不起作用.

谢谢

linux bash shell

0
推荐指数
1
解决办法
52
查看次数