【问题标题】:My Rails app is not saving data to the database我的 Rails 应用程序没有将数据保存到数据库中
【发布时间】:2019-12-29 23:51:59
【问题描述】:

我目前正在创建一个 Rails 表单。到目前为止,它一直在轻松地将数据传递到数据库。最近,但是它不再在数据库中找到我需要的任何数据,它只能找到用户表而没有找到连接的表。

这是我的部分表格:

<h1>Energy Assistance Application</h1>
<br />

<%= form_for(@user) do |f| %>

  <%= render 'county_fields', f: f%>

  <%= render 'contact_info_fields', f: f %>

  <%= render 'household_members_fields', f: f%>

  <%= render 'household_type_fields', f: f%>

这是我的控制器的一部分:

  def create
    addresses = params[:addresses].permit([:county]).to_h
    contact_info = params[:contact_info].permit(params[:contact_info].keys).to_h
    household = params[:household_type].permit([:house_type]).to_h
    household_members = member_params
    utilities = utility_params
    dhis = dhi_params
    @workflow = CreatesUser.new(address_info: addresses,
      contact: contact_info, household: household, members: household_members, utilities: utilities, dhis: dhis)
    @workflow.create
    redirect_to users_path
  end

创建用户:


  def initialize(address_info: [], has_mail: false, contact: [], household: [], members: [],
      utilities: [], dhis: [])
    @address_info = address_info
    @contact = contact
    @household = household
    @members = members["household_members_attributes"]
    @utilities = utilities["utilities_attributes"]
    @dhis = dhis["dhis_attributes"]
  end

  def build
    self.user = User.new(startdate: Time.zone.today)
    user.addresses = get_addresses
    user.contact_info = get_contact
    user.household_type = get_household
    user.household_members = get_members
    user.utilities = get_utilities
    user.dhis = get_dhis
    user
  end

  def create
    build 
    result = user.save
    result ? print("Saved!\n") : print("Failed!\n")
  end

我的 index.html.erb:

<h1>All Users</h1>
<% @users.each do |user|%>
  <%= user.utilities%>
  <ul>
    <li>County: 
      <% user.addresses.each do |address|%>
        <%=address.county%>
      <%end%>
    </li>
    <% if !user.contact_info.nil? %>   
      <li>Phone: <%= user.contact_info.phone%></li>
      <li>Phone Type:<%= user.contact_info.phone_type%></li>
      <li>Email: <%= user.contact_info.email%></li>
    <%end%>
    <li>Household: <%= user.household_type.house_type%></li>  
  </ul>

当工作流创建时,它保存成功,但是当我运行我的索引时,我得到了这个错误:

Completed 500 Internal Server Error in 19ms (ActiveRecord: 1.1ms)



ActionView::Template::Error (undefined method `house_type' for nil:NilClass):
    12:       <li>Phone Type:<%= user.contact_info.phone_type%></li>
    13:       <li>Email: <%= user.contact_info.email%></li>
    14:     <%end%>
    15:     <li>Household: <%= user.household_type.house_type%></li>  
    16:   </ul>
    17: 
    18:   <h3> Household Members </h3>

app/views/users/index.html.erb:15:in `block in _app_views_users_index_html_erb___590344624549979162_70244223831340'

我不知道为什么会发生这种情况,即使当我回到曾经工作的旧分支时,它们也会在这里失败。 谢谢你能给我的任何帮助。如果您需要更多信息,我很乐意提供给您。

【问题讨论】:

  • 您能否添加您的用户模型(至少是关系部分)。

标签: ruby-on-rails ruby database forms


【解决方案1】:

我认为你的问题在于你的形式。重新检查你的参数(family_type),提交时它必须有一个值。

另外一种方式,如果你想根据当前模型更新差异模型,你应该使用Active Record Nested Attributes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多