Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中删除行后更新_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyonRails中删除行后更新

Ruby on rails RubyonRails中删除行后更新,ruby-on-rails,Ruby On Rails,我创建了两个模型,即“用户”和“通信”,模式如下: user model scheme: id | name | Email | SkillType | user_Need 1 | ijk | ijk@ijk.com | Mentor | Ap Chinese 2 | mno | mno@mno.com | Protege | Ap Biology Communication model schema: id | UserID | Comm

我创建了两个模型,即“用户”和“通信”,模式如下:

user model scheme:
id | name | Email       | SkillType     | user_Need
1  | ijk  | ijk@ijk.com | Mentor        | Ap Chinese
2  | mno  | mno@mno.com | Protege       | Ap Biology

Communication model schema:
id | UserID | CommunicationMode | CommunicationDetail
1  | 1      | Phone             | 1234567890
2  | 1      | Email             | ijk@ijk.com 
在用户模型中,我有许多与通信相关的
,在通信模型中,我有
属于:User
当用户注册到应用程序时,我添加通信首选项,在设置中,我尝试在单独的控件中显示该用户的通信首选项。当用户提交设置页面时,我想删除通信中与当前用户相关的每条记录,其工作正常,代码如下

Communication.delete_all(:UserID => current_user.id)
但当我从控制器中的新操作更新它们时,记录并不是从通信中更新的。下面是我的“新”行动代码:

  def create
    @user_basic=User.find(current_user.id)
    @students=Students.all
    @entrepreneurs=Entrepreneurs.all
    @veterans=Veterans.all
    @user_communication=Communication.where(:UserID => current_user.id)
    Communication.delete_all(:UserID => current_user.id)
    @user_communication.update_attributes(:CommunicationMode => "CommunicationDetail")
    render 'new'
  end
在这行“@user\u communication.update\u attributes(:CommunicationMode=>“CommunicationDetail”)中,我得到了以下错误信息


请告诉我哪里出错,等待答复。谢谢

我不明白你想做什么

@user_communication=Communication.where(:UserID => current_user.id)
Communication.delete_all(:UserID => current_user.id)
@user_communication.update_attributes(:CommunicationMode => "CommunicationDetail")
删除给定用户的通信,然后尝试使用
CommunicationMode=“CommunicationDetail”
更新其属性

因此,更新失败,因为没有记录。
我几乎可以肯定,您尝试应用的逻辑存在问题

您的语法不正确

删除指定的元素。问题是,然后您试图使用调用完全相同的元素

你需要这样的东西:

def create
    @user_basic = User.find(current_user.id)
    @students = Students.all
    @entrepreneurs = Entrepreneurs.all
    @veterans = Veterans.all

    @user_communication = @user_basic.communications #-> based on has_many / belongs_to assoc
    @user_communication.update_all(CommunicationMode: "CommunicationDetail")

    render 'new'
  end

如果只想更新记录,不需要先删除它们。您只需使用
update\u attributes
将新数据插入数据库

,那么在更新之后,我应该如何更新表的特定列而不是删除行。您根本不需要删除行,只需更新
@user\u communication
实例即可。换句话说,您不必执行
通信。全部删除(:UserID=>current\u user.id)
,其余的可能就可以了。如果您使用
全部删除部分,然后您可以更新记录器。这两种型号都是不同的,那么您为什么要使用这个“@user\u communication=@user\u basic.communication”,因为如果您有设置,您可以根据您的“父”型号(用户)中的
外键调用数据,我想,
用户有一个:通信
&
通信属于:用户
。这意味着您可以调用
@user.communication
来检索通信数据:)架构不描述关联-让我来修正我的答案,顺便问一下,您使用CamelCase作为属性名有什么特殊原因吗?
def create
    @user_basic = User.find(current_user.id)
    @students = Students.all
    @entrepreneurs = Entrepreneurs.all
    @veterans = Veterans.all

    @user_communication = @user_basic.communications #-> based on has_many / belongs_to assoc
    @user_communication.update_all(CommunicationMode: "CommunicationDetail")

    render 'new'
  end