Ruby on rails 在视图中选择数据并将其插入到用户数据库中

Ruby on rails 在视图中选择数据并将其插入到用户数据库中,ruby-on-rails,Ruby On Rails,我正在从outlookapi读取用户的联系信息,我想使用submit\u tag方法将其添加到我的用户数据库中。但它不起作用。到目前为止,我在index.html.erb上的表单如下所示: <h1>My contacts</h1> <table class="table"> <tr> <th>First Name</th> <th>Last Name</th> <th

我正在从
outlookapi
读取用户的联系信息,我想使用
submit\u tag
方法将其添加到我的用户数据库中。但它不起作用。到目前为止,我在
index.html.erb
上的表单如下所示:

<h1>My contacts</h1>
<table class="table">
  <tr>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Email</th>
  </tr>

<%= form_tag import_contacts_path, method: :put do %>
  <%= submit_tag "Import Selected contact" %>

  <% @contacts.each do |contact| %>
    <tr>
      <td> <%= check_box_tag "contact_ids[]", 'Select' %></td>
        <td><%= contact.given_name %></td>
      <td><%= contact.surname %></td>
      <td><%= !contact.email_addresses[0].nil? ? contact.email_addresses[0].address : '' %></td>
    </tr>
  <% end %>
</table>
    <%= submit_tag "Import Selected contactact" %>
<% end %>
class ContactsController < ApplicationController

  include AuthHelper

  def index
    token = get_access_token
    if token
      # If a token is present in the session, get contacts
      callback = Proc.new do |r|
        r.headers['Authorization'] = "Bearer #{token}"
      end

      graph = MicrosoftGraph.new(base_url: 'https://graph.microsoft.com/v1.0',
                                 cached_metadata_file: File.join(MicrosoftGraph::CACHED_METADATA_DIRECTORY, 'metadata_v1.0.xml'),
                                 &callback)

      @contacts = graph.me.contacts.order_by('givenName asc')
    else
      # If no token, redirect to the root url so user
      # can sign in.
      redirect_to root_url
    end
  end

  def import
    User.create(:first_name => @contacts.givenName , :last_name => @contacts.surname, :email => @contacts.email_addresses)
    redirect_to imported_path
  end

end
我的路线看起来像

   resources 'contacts' do
      collection do
        put :import
      end

有人知道是否真的可以创建这样的导入函数吗?因为我试图读取的内容实际上不在本地数据库中。

您在中调用了@contacts

def import
   User.create(:first_name => @contacts.givenName , :last_name => @contacts.surname, :email => @contacts.email_addresses)
redirect_to imported_path
end
但您尚未定义@contacts。因为@contacts是nil,而您将givenName调用为nil,所以这是一个错误。您可以在导入方法内或在筛选之前指定@contacts,以便该方法中的@contacts可用。 希望定义@contacts可以解决这个问题。如果问题仍然存在,请告诉我

请检查参数,在参数中,值必须已经出现,您可以使用

def import
   User.create(:first_name => params[:givenName] , :last_name => params[:surname], :email => params[:email_addresses])
   redirect_to imported_path
end

试试这个,如果有任何问题请告诉我。或者您可以发送所需的参数。

我最终在控制器中创建了以下函数:

 def import_contact(contact)
    Contact.create(email: !contact.email_addresses[0].nil? ? contact.email_addresses[0].address : '', first_name: contact.given_name, last_name: contact.surname, user_id: current_user )

    return !contact.email_addresses[0].nil? ? contact.email_addresses[0].address : ''
  end
视图调用函数:


不幸的是,通过这种方式,我没有选择要导入的CONTACT。我把它们都导入了,但这是我现在能找到的最好的了。

我被困在同一个地方。我像在
索引中那样定义了@contact,但是我没有字段名,因为它不是实际的db。
 def import_contact(contact)
    Contact.create(email: !contact.email_addresses[0].nil? ? contact.email_addresses[0].address : '', first_name: contact.given_name, last_name: contact.surname, user_id: current_user )

    return !contact.email_addresses[0].nil? ? contact.email_addresses[0].address : ''
  end