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