Rails仅从current_user形成选择的URL集合?

时间:2017-07-19 22:11:16

标签: ruby-on-rails-5

我的设置message有很多url

我正在使用Devise。

我正在尝试在集合上选择此表单以仅收集与url关联的current_user。目前它抓住了所有网址。

<%= f.select :url_id, 
  Url.order('name asc').all.collect { |u| [u.name, u.id] },
  { class: 'form-control' }
%>

我可以执行将.all更改为.where current_user.id等内容吗?

2 个答案:

答案 0 :(得分:1)

让你的模特像:

class User < ApplicationRecord
  has_many :messages
end

class Message < ApplicationRecord
  belongs_to :user
  has_many :urls
end

class Url < ApplicationRecord
  belongs_to :message
end

然后,您可以使用joins中的Url,然后使用User模型,并使用pluck获取url和{{ 1}}属性,类似于:

id

您在def new @urls = Url.joins(message: :user).where('users.id = ?', current_user).pluck(:url, :id) end 方法中定义了一个名为@urls的实例变量(我认为它是您当前的方案),它获取new的网址。

请注意,创建变量是为了维护MVC逻辑,而不在视图中添加查询。

然后你可以在你的视图中添加current_user表单助手,传递select变量,一个空的第三个参数,然后是第四个类:

@urls

答案 1 :(得分:1)

以为我会分享我最终结束的工作。

我在message添加了一个final_url列。

before_create组合了request.base_url和short_url。将这两个组合成一个列后,只有两个列才有用。

message.rb
  before_create do
    self.body = "#{self.body} #{self.url}"
  end

选择工作为塞巴斯蒂安建议

<%= f.select :url, @urls, {}, class: 'form-control' %>

message_controller.rb
@urls = Url.where('user_id = ?', current_user).pluck(:name, :final_url)