我正在尝试从几个已执行连接的表中获取列名来组合它们。
我尝试过以下操作:
User.joins(:user_account, :user_file, :user_education).column_names
但这只是从User返回列名,就像我刚刚完成以下操作一样:
User.column_names
有谁知道如何从连接中获取所有列名?似乎通常不需要这样做,因为在网上似乎没有太多关于它的信息。我需要它来验证用户参数。
谢谢!
编辑:
用户表中的列名:
["id", "status", "accepted_terms", "created_at", "updated_at", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "provider", "uid"]
User_account表中的列名:
["first_name", "last_name", "phone_number", "address"]
我希望能够获得整个列名列表,即
["id", "status", "accepted_terms", "created_at", "updated_at", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "provider", "uid", "first_name", "last_name", "phone_number", "address"]
我需要什么方法来准确获取该列表?我试过了
User.joins(:user_account).column_names
但这只是给我第一组列名,即只是用户表中的列名(不是用户帐户表中的名称)。
答案 0 :(得分:1)
你可以这样做:
User.column_names + UserAccount.column_names
等等。 Rails从ActiveRecord类中检索列名,而不是从SQL关系中检索。
UPD。或者更惯用的
[User, UserAccount, UserFile, UserEducation].flat_map(&:column_names).uniq
答案 1 :(得分:0)
这是红宝石吗? 我对那种语言及其语法并不熟悉,但明确依赖于MySQL知识,我认为你缺乏这些表如何相互连接! 您可以看到this post以获取我认为有助于解决您问题的更多信息!
编辑: 邮报说: Rails允许您在字符串中编写自定义连接条件,如下所示:
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(....); // do it here after casting
}
或更清洁只需指定几个连接子句:
Reservation.joins('INNER JOIN "tables" ON "tables"."id" = "reservations"."table_id" INNER JOIN "users" ON "users"."id" = "reservations"."user_id"')
要提取数据,您只需应用一些自定义选择子句,如下所示:
Reservation.join(:user).join(:table)
答案 2 :(得分:0)
你可以这样做。
User.select("users.*, user_accounts.*, user_files.*, user_educations.*").joins(:joins(:user_account, :user_file, :user_education))
我希望这会有所帮助。
快乐黑客