Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >记录的自引用关系将仅创建与其自身的关系

记录的自引用关系将仅创建与其自身的关系
EN

Stack Overflow用户
提问于 2019-05-12 16:34:46
回答 1查看 37关注 0票数 0

我正在尝试创建一种方法,通过该方法,用户可以将相关记录附加到现有记录,类似于用户可以关注其他用户的方式。但是,当调用该方法时,只能在记录和其自身之间建立关系。我将我的代码建立在关注者/关注者模型上,我认为问题的出现是因为该方法无法区分当前记录和选择要创建关系的记录。有什么想法可以解决这个问题吗?相关代码如下...

模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class Ingref < ApplicationRecord
        has_many :active_relationships, class_name: "Ingrelationship",
                                    foreign_key: "child_id",
                                    dependent: :destroy
    has_many :passive_relationships, class_name: "Ingrelationship",
                                     foreign_key: "parent_id",
                                     dependent: :destroy
    has_many :children, through: :active_relationships, source: :parent
    has_many :parents, through: :passive_relationships, source: :child

    # Follows a user.
    def follow(other_ingref)
        children << other_ingref
    end

    # Unfollows a user.
    def unfollow(other_ingref)
        children.delete(other_ingref)
    end

    # Returns true if the current user is following the other user.
    def following?(other_ingref)
        children.include?(other_ingref)
    end

end 

关系控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class IngrelationshipsController < ApplicationController
    before_action :set_search

    def create
        ingref = Ingref.find(params[:parent_id])
        ingref.follow(ingref)
        redirect_to ingref
    end

    def destroy
        ingref = Ingrelationship.find(params[:id]).parent
        @ingref.unfollow(ingref)
        redirect_to ingref
    end
end

关系模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Ingrelationship < ApplicationRecord
    belongs_to :child, class_name: "Ingref"
    belongs_to :parent, class_name: "Ingref"
end

表格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<% Ingref.find_each do |ingref| %>

        <div class="col-md-2">
              <div class="caption">
                <h3 class="title" style="font-size: 14px;"> <%= ingref.name %> </h3>
                    <%= form_for(@ingref.active_relationships.build) do |f| %>
                        <div><%= hidden_field_tag :parent_id, ingref.id %></div>
                        <%= f.submit "Follow" %>
                    <% end %>
              </div>
            </div>
          <% end %>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 03:11:56

我发现上面概述的问题是由于在自我引用关系中的两个记录之间的子代-父代关系中没有定义子代。通过在表单和控制器中分别添加以下行,我能够定义此变量并创建所需的关系。

表格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= hidden_field_tag :child_id, @ingref.id %>

控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
current_ingref = Ingref.find(params[:child_id])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56101266

复制
相关文章
GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析
The GNU Compiler Collection,通常简称GCC,是一套由GNU开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持C语言编译,还支持C++, Ada, Objective C等许多语言。另外GCC对硬件平台的支持,可以所无所不在,它不仅支持X86处理器架构, 还支持ARM, Motorola 68000, Motorola 8800, Atmel AVR, MIPS等处理器架构。
全栈程序员站长
2022/07/18
6.8K0
GCC 优化级别
1. gcc中指定优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast。
KINGYT
2019/10/22
8.1K0
第009课 gcc和arm-linux-gcc和Makefile
hello.c(预处理)->hello.i(编译)->hello.s(汇编)->hello.o(链接)->hello
韦东山
2020/09/30
4.9K0
第009课 gcc和arm-linux-gcc和Makefile
【图片+代码】:GCC 链接过程中的【重定位】过程分析
最近因为项目上的需要,利用动态链接库来实现一个插件系统,顺便就复习了一下关于Linux中一些编译、链接相关的内容。
IOT物联网小镇
2022/04/06
8140
【图片+代码】:GCC 链接过程中的【重定位】过程分析
arm-gcc各版本区别
从本质来讲他们都是编译器,而gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机器码。这些机器码代表什么含义只有机器本身能理解。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。
云深无际
2020/08/12
3.4K0
arm-gcc各版本区别
Ubuntu18.04安装arm-linux-gcc交叉编译工具(附arm-linux-gcc 5.4.0包)
下载(百度云)链接:https://pan.baidu.com/s/1AeqzkboWkJDJjU9HxtXhrA 提取码:uzup
全栈程序员站长
2022/06/28
4.3K0
Ubuntu18.04安装arm-linux-gcc交叉编译工具(附arm-linux-gcc 5.4.0包)
GCC编译优化选项
查看GCC各选项打开的优化项:gcc -Q --help=optimizers。分为如下:
叫你不戴帽子
2019/01/03
8K0
arm-linux-gcc 4.3.2编译uboot 1.1.6
在第三期项目的视频中,官方提供了一整套新的工具链,bootloader, 内核和文件系统(arm-linux-gcc_4.3.2, uboot-2012.04.01, linux-3.4.2)其中uboot-2012.04.01来源于毕业班,其下载烧写功能远不如uboot-1.1.6,因此我更偏向于使用老版的Uboot。但是第三期的工具链却无法直接编译uboot-1.1.6, 现在将解决这一问题。
韦东山
2022/09/08
2.8K0
qt交叉编译环境搭建_arm linux gcc
AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 64 位和 32 位寄存器。
全栈程序员站长
2022/11/07
6.6K0
qt交叉编译环境搭建_arm linux gcc
Linux系统中使用GCC CPU参数优化代码编译
在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU而进行特定优化过的,因而执行速度和效率都会是最好。
一见
2018/08/07
2.4K0
arm 开发板更新 gcc/gcc++ | Debain 更新 gcc,无需编译直接更新 gcc
网上的方法,大多是copy的,要下载gcc源码包,然后编译。我想说,你就算用 8G 内存的电脑,解压、配置、编译,没几个小时搞不来。
痴者工良
2021/04/26
7990
ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍[通俗易懂]
  在讲解各编译器之前,必须先了解一下以下这些文件。这些文件在编译器目录下或者编译生成目标平台的可执行程序时经常见到。此外,还需要注意区分 Windows 平台 和 Linux 平台的文件。
全栈程序员站长
2022/06/28
15.5K0
ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍[通俗易懂]
STM32高级开发——gcc-arm-none-eabi
素材来源:https://blog.csdn.net/zhengyangliu123/article/details/54783443
李肖遥
2022/12/22
1.4K0
STM32高级开发——gcc-arm-none-eabi
遍历ArrayList的过程中移除元素的方式
原因:在匹配到第一个要删除的元素并移除时,后面元素会往前移位,导致索引位置改变,从而漏掉后面一个元素。
全栈程序员站长
2022/09/15
6180
GCC生成的汇编代码
GCC产生的汇编代码有点难读,它包含一些我们不关心的信息。所有以 "." 开头的行都是指导汇编器和链接器的命令,称为“汇编器命令”。
Java架构师必看
2021/03/22
2.2K0
GCC生成的汇编代码
在arm上编译php
其实在arm上编译php和在x86没有太大区别,主要是很多依赖都需要重新编译,这里拿openssl和curl举例。
老高的技术博客
2022/12/29
1K0
在centos中更新gcc到6.4.0
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/update-gcc-in-centos/
羽翰尘
2019/11/21
1.1K0
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
本文介绍了如何将OpenCV库移植到ARM平台上,包括编译工具链、依赖库、配置方法以及运行时注意事项。
剑影啸清寒
2018/01/02
9.5K1
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
点击加载更多

相似问题

GCC ARM乘法优化

223

GCC优化:使用ARM条件指令?

27

停止ARM GCC优化函数调用

217

gcc代码的ARM源代码

15

GCC优化移除功能序言与启示

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文