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