我是ROR的新手。我在下面创建的查询运行正常。我正在准备讯问。但是我没有成功。查询如下;
@rad_user_group.groupname = SELECT groupname FROM radgrs INNER JOIN nas WHERE radgrs.grdefault = true AND radgrs.tenant_id = nas.tenant_id AND nas.realipaddr = "192.168.22.175" AND nas.active = true
在另一个问题中,如何为以下查询设置大小写?如果查询失败,则返回NULL。
感谢您的关心。
def realipaddr
request.remote_addr
end
def create
@rad_check = RadCheck.new(rad_check_params)
@rad_check.tenant_id = Na.find_by(realipaddr: realipaddr, active: :true).tenant_id
respond_to do |format|
if @rad_check.save
format.html { redirect_to @rad_check, notice: 'Rad check was successfully created.' }
format.json { render :show, status: :created, location: @rad_check }
else
format.html { render :new }
format.json { render json: @rad_check.errors, status: :unprocessable_entity }
end
end
end
RadCheck模型
class RadCheck < ApplicationRecord
has_one :rad_user_group, dependent: :destroy
after_initialize :add_rad_user_group
before_save :set_radcheck
def add_rad_user_group
self.rad_user_group ||= RadUserGroup.new if self.new_record?
end
def set_radcheck
self.rad_user_group.username = username
self.op = ":="
self.attribu = "Cleartext-Password"
end
end
class CreateRadChecks < ActiveRecord::Migration[5.2]
def change
create_table :rad_checks do |t|
t.integer :tenant_id
t.string :username
t.string :password
t.string :attribu
t.string :op
t.string :realipaddr
t.string :groupname
t.timestamps
end
end
end
Radgr模型
class Radgr < ApplicationRecord
end
class CreateRadgrs < ActiveRecord::Migration[5.2]
def change
create_table :radgrs do |t|
t.integer :tenant_id
t.string :groupname
t.string :realipaddr
t.boolean :grdefault
end
end
end
RadUserGroup模型
class RadUserGroup < ApplicationRecord
belongs_to :rad_check
end
class CreateRadUserGroups < ActiveRecord::Migration[5.2]
def change
create_table :rad_user_groups do |t|
t.integer :tenant_id
t.string :username
t.string :groupname
t.references :rad_check, foreign_key: true
t.timestamps
end
end
end
Na模型
class Na < ApplicationRecord
end
class CreateNas < ActiveRecord::Migration[5.2]
def change
create_table :nas do |t|
t.integer :tenant_id
t.string :nasname
t.string :realipaddr
t.boolean :active
end
end
end
答案 0 :(得分:0)
您应该更好地组织对象关联。这些对象显然具有某种关系。
类似于Radgr模型和Na模型。我认为您可以在这两者之间建立联系,因此以后可以使用查询命令<p:outputPanel>
<p:inputTextarea id="test">
</p:inputTextarea>
</p:outputPanel>
<p:draggable for="test" containment="parent" />
或类似的命令。
这也是一个将SQL转换为ActiveRecord查询的好站点,但是您需要在此处创建模型和关联以进行测试。 请检查: http://www.scuttle.io/
答案 1 :(得分:0)
我使用了如下查询。但是我有一些问题。
self.rad_user_group.groupname = Radgr.select(:groupname).joins(:nas).where(nas: {tenant_id: :tenant_id},nas: {realipaddr: "192.168.22.175"})
我收到了类似控制台发出的警告。
(irb):1: warning: key :nas is duplicated and overwritten on line 1
控制台输出
2.4.1 :001 > Radgr.select(:groupname).joins(:nas).where(nas: {tenant_id: :tenant_id}, nas: {realipaddr: "78.189.33.53"})
(irb):1: warning: key :nas is duplicated and overwritten on line 1
(0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Radgr Load (0.2ms) SELECT `radgrs`.`groupname` FROM `radgrs` INNER JOIN `nas` ON `nas`.`tenant_id` = `radgrs`.`id` WHERE `nas`.`realipaddr` = '78.189.33.53' LIMIT 11
=> #<ActiveRecord::Relation [#<Radgr id: nil, groupname: "Testo2">]>
最重要的是,它确实记录了SQL,但是它确实记录了以下内容。
#<Radgr::ActiveRecord_Relation:0x007fbc9c3cb1e8>
如果我在查询的末尾添加.to_a
,录音就是这样。
[#<Radgr id: nil, groupname: "Testo2">]
我们如何解决这些问题?