0

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

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

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

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

更新

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

管理员.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) 将值提交给方法的正确方法是什么?谢谢

4

1 回答 1

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 %>
于 2012-12-16T17:17:11.987 回答