Ruby on rails 处理两个未关联的Rails模型';一个控制器动作中的窗体

Ruby on rails 处理两个未关联的Rails模型';一个控制器动作中的窗体,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,mechanize,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,Mechanize,Rails Activerecord,我正在创建一个Rails应用程序,它将接收来自两个模型及其各自表单的输入,然后使用Mechanize登录一个网站并在那里执行数百项任务 第一个表单包括用户的登录信息(用户名和密码,使用模型用户),第二个表单是一个术语名称及其各自定义的长列表(使用模型术语,并作为Excel文档上传到表单中) 我不需要将这两个模型关联起来(与类似的SO问题不同,后者似乎处理嵌套模型)。一旦这个机械化任务完成,我将从数据库中销毁这两个模型的对象 应用程序的两个部分(登录到网站;上传术语并使用它们与网站交互)都在单独的

我正在创建一个Rails应用程序,它将接收来自两个模型及其各自表单的输入,然后使用Mechanize登录一个网站并在那里执行数百项任务

第一个表单包括用户的登录信息(用户名和密码,使用模型
用户
),第二个表单是一个术语名称及其各自定义的长列表(使用模型
术语
,并作为Excel文档上传到表单中)

我不需要将这两个模型关联起来(与类似的SO问题不同,后者似乎处理嵌套模型)。一旦这个机械化任务完成,我将从数据库中销毁这两个模型的对象

应用程序的两个部分(登录到网站;上传术语并使用它们与网站交互)都在单独的脚本中完美工作

我的问题是:如何在一个网页上获取两个模型的信息,并相应地协调控制器?在这种情况下,我可以在一个控制器中创建两个对象吗?(如果没有,那没关系,只要有其他选择;我愿意做任何能让这一切起作用的事情。)

我在下面发布了我的一些代码。我很乐意回答您的任何问题。请记住,我是Rails的新手,所以代码不是很优雅:

用户
型号:

class User < ActiveRecord::Base
    attr_accessor :username, :password
end
class Term < ActiveRecord::Base
    attr_accessible :name, :definition
end
在my
terms
控制器中(表单位于
索引
操作中,脚本在
显示
操作中运行):

视图/terms/index.html.erb
中:

#the login form:
<%= render 'loginform' %> 

#the term file uploader:
<%= form_tag import_terms_path, multipart: true do %> 
<%= file_field_tag :file %>
<%= submit_tag "Import" %>
<% end %>

<br>
<table id="terms">
  <tr>
    <th>Name</th>
    <th>Definition</th>
  </tr>

#displays the uploaded terms on the index page
<% @terms.each do |term| %> 
  <tr>
    <td><%= term.name %></td>
    <td><%= term.definition %></td>
  </tr>
<% end %>
</table>

<p><%= link_to 'Update website with these terms', terms_update_terms_path %></p>
 <%= form_for(@user) do |f| %>
 <div class="field">
  <%= f.label_tag(:username, 'Username') %><br />
  <%= f.text_field_tag(:user, :username) %>
</div>
<div class="field">
 <%= f.label_tag(:password, 'Password') %><br />
 <%= f.password_field_tag(:user, :password) %>
</div>
<% end %>
views/terms/_termform.html.erb

<%= form_for(@term) do |f| %>
  <div class="field">
   <%= f.label :name %><br />
   <%= f.text_field :name %>
  </div>
  <div class="field">
   <%= f.label :definition %><br />
   <%= f.text_area :definition %>
  </div>
  <div class="actions">
   <%= f.submit %>
  </div>
<% end %>




如果您只需要保存数据,而确实不想关联模型,我会单独保存术语:

<%= form_for @user do |f| %>
    <div class="field">
      <%= f.label :username, 'Username' %>
      <%= f.text_field :username %>
    </div>
    <div class="field">
      <%= f.label :password %>
      <%= f.password_field :password %>
    </div>
    <div class="field">
      <%= label_tag :name %>
      <%= text_field_tag :name %>
    </div>
    <div class="field">
      <%= label_tag :definition %>
      <%= text_field_tag :definition %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
<% end %>

如果您向表单中添加多个术语字段,我会考虑类似的内容,并且只需添加一个用于保存控制器中的术语的每个循环。

谢谢您的响应。然而,我有点困惑,这很可能是因为我是Rails新手。在
@user
的表单中,
@term
的属性也在其中-为什么?另外:你能澄清一下你的控制器代码应该如何在我当前的设置中实现吗?(即,在哪个操作中,应该删除哪些其他代码来为其让位?)这是否意味着我不需要
用户
控制器?嗨,CodeBiker,控制器代码将进入您的用户#创建操作。在我的表单代码中,Term的属性只是作为参数传递(而不是在:Term散列中),这样就不需要按照您的描述使用嵌套表单。
<%= form_for @user do |f| %>
    <div class="field">
      <%= f.label :username, 'Username' %>
      <%= f.text_field :username %>
    </div>
    <div class="field">
      <%= f.label :password %>
      <%= f.password_field :password %>
    </div>
    <div class="field">
      <%= label_tag :name %>
      <%= text_field_tag :name %>
    </div>
    <div class="field">
      <%= label_tag :definition %>
      <%= text_field_tag :definition %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
<% end %>
@term = Term.new

@term.attributes = {
:name => params[:name],
:definition => params[:definition]
}

@term.save