【问题标题】:rails store current user email in database on form submitrails 在表单提交时将当前用户电子邮件存储在数据库中
【发布时间】:2019-02-25 04:26:54
【问题描述】:

我的数据库中有一个名为“电子邮件”的列。我想在他们提交特定表单时将当前登录用户的电子邮件地址存储到此列中。

起初我想我应该在 html 中写一些东西来获取当前用户的电子邮件地址并将其隐藏在表单中的某个地方,但我意识到这可能是个坏主意,因为任何人都可以修改 html 以放置任何电子邮件他们想要的地址。

所以我的问题是,我会在控制器中解决这个问题吗?如果是这样,我将如何去做?

【问题讨论】:

  • 我可以知道为什么您需要将电子邮件保存在数据库中,您可以使用会话,或者如果您有带有电子邮件的用户表,然后使用该用户 ID 将其保存在另一个表中
  • 我想跟踪请求的来源。我将如何使用任何一种方法
  • 我假设你有一个用户表。因此,在另一个表中,您可以添加 user_id 字段而不是电子邮件字段,这样您就可以轻松保存当前登录的用户,并且使用关联会很容易
  • 我确实有一个用户表。你能给我一个可以用来构建的例子吗?
  • 你在使用 devise gem 吗?

标签: ruby-on-rails forms


【解决方案1】:

我将另一个模型命名为文章(你可以使用你的)

在该表中有一个名为 user_id 而不是电子邮件的列

 Class User
   has_many :articles
 end

 Class Article
   belongs_to :user
 end


 class ArticlesController
   def create
     @article = current_user.articles.new(article_params)
     @article.save
   end

  def article_params
    params.require(:article).permit(:field1, :field2)
  end

 end

如果您执行此类操作,则 user_id 将自动保存在该表中。 因此,您可以轻松获取属于该用户的所有文章。

user = User.first
user.artciles # you will get all articles belonged to that user

article = Article.first
article.user # you will get user of that article

希望对你有帮助

【讨论】:

  • 我想我快到了,虽然上面写着Unable to autoload constant User, expected /RailsProjects/PROJECT/app/models/user.rb to define it
  • 你有名为 user 的模型吗?
  • 是的,这是我的代码class User < ApplicationRecord has_secure_password validates :email, presence: true, uniqueness: true has_many :requests end
  • 好的。我假设文件名是 user.rb 并且在上述错误中提到的相应路径中
  • 我想通了。看我上面的回答
【解决方案2】:

想通了

@request.email = current_user.email @request.save

【讨论】:

  • 你可以使用这个,但是默认的关联在 b/w 请求和用户中不起作用
  • 不需要成为我如何构建它的关联。我基本上会写一个 if 语句,如果 db email 值与当前用户的电子邮件匹配,那么 x
  • 哦,好的,谢谢...谢谢
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多