Rails - 如何将一个产品与多个用户相关联?

时间:2012-12-16 16:48:28

标签: ruby-on-rails activerecord

初学者问题,任何帮助非常感谢。我有一个用户表和一个产品表以及一个名为products_users的连接表。我可以通过执行以下操作在命令行中成功地将产品链接到用户:

u = User.where(:state => 'Oregon').first
u.products << Product.where(:search_location => 'Portland')

我的第一个问题是如何将波特兰产品链接到拥有俄勒冈州而不仅仅是一个用户的所有用户?如果我不添加.first,它就不起作用。

但我的主要问题是如何让应用程序执行此操作而不是在命令行中执行此操作?例如,我有一个包含10,000个用户的表,其中1000个是:state =&gt; 'Oregon'所以我如何创建一个管理页面,我可以在其中键入Oregon到州字段,然后在另一个字段中键入Portland并将相应的条目链接在一起并添加到连接表中?

更新

使用siddick的代码,我想出了这个:

admin.rb

def link_product_to_user
products = Product.where(:search_location => params[:location])
User.where(:state => params[:state]).find_each do |user|
  user.products << products
end
  end

admin_controller.rb

def index    
@link = link_product_to_user
end

管理员/ index.html.erb

<%= form_for(@link) do |f| %>
<div class="field">
  <%= f.label :location %><br />
  <%= f.text_field :location %>
</div>
<div class="field">
  <%= f.label :state %><br />
  <%= f.text_field :state %>
</div>

<div class="actions">
  <%= f.submit %>
</div>

会出现以下错误:

undefined local variable or method `link_product_to_user' for #<AdminController:0x007fd8e899bf10>

我应该如何定义方法以便找到它?并使用form_for(@link)正确的方法将值提交给方法?感谢

1 个答案:

答案 0 :(得分:1)

您可以使用find_each逐个处理记录。

def your_action
  products = Product.where(:search_location => params[:location])
  User.where(:state => params[:state]).find_each do |user|
    user.products << products
  end if products.exists?
  ... Your code ...
end

索引视图文件可以是:

<%= form_tag(:action => "link_product_to_user") do %>
  <div class="field">
    <%= label_tag :location %><br />
    <%= text_field_tag :location, params[:location] %>
  </div>
  <div class="field">
    <%= label_tag :state %><br />
    <%= text_field_tag :state, params[:state] %>
  </div>
  <div class="actions">
    <%= submit_tag %>
  </div>
<% end %>
相关问题