ruby-on-rails - Rails 4 - 为表单中关联表中的行分配值

标签 ruby-on-rails postgresql

这里是 Rails 的初学者,对于我的项目,我需要创建一个包含名字、中间名、姓氏和他们的护照等内容的客户。我有另一个名为 passports 的表,用于存储护照。我希望能够添加与客户关联的护照号码。以下是相关的代码片段:

客户端 Controller

def new
  @client = Client.new
end
def create
  @client = Client.new(client_params)
  if @client.save
    redirect_to root_url
  else
    render 'new'
  end
end

private
  def client_params
    params.require(:client).permit(:firstname, :middlename, :lastname, :PresentAddress)
  end
end

护照 Controller

def new
    @passport = Passport.new
end
def create
    passport = Passport.new(passport_params)
    if @passport.save
        flash[:notice] = "Passport saved"
    else
        flash[:notice] = "Passport not saved"
    end
end
private
    def passport_params
        params.require(:passport).permit(:idnumber, :country)
    end
end

客户模型

has_one :passport, foreign_key: "client_id"

护照模型

belongs_to :client

客户端的迁移文件

create_table :clients do |t|
  t.string :firstname
  t.string :middlename
  t.string :lastname
end

护照的移民文件

create_table :passport do |t|
  t.string :passport
end

/clients/_form.html.erb

<%= form_for(@client) do |f| %>
  <%= f.label :"First Name"%>
  <%= f.text_field :firstname%>
  <%= f.label :"Middle Name"%>
  <%= f.text_field :middlename%>
  <%= f.label :"Last Name"%>
  <%= f.text_field :lastname%>
<%= f.submit "Create Client" %>
<% end %>

/passport/_form.html.erb

<%= form_for([@client, @client.passport.build]) do |f| %>
    <%= f.label :"Passport ID Number" %>
    <%= f.text_field :idnumber %>
    <% f.submit "Create Passport" %>
<% end %>

/clients/new.html.erb

<%= render "clients/form" %>
<%= render "passports/new" %>

我希望能够以这种形式为客户创建护照并将其发送到我的 Postgres 数据库。我该怎么做呢?如果我遗漏任何其他信息,请告诉我。

编辑 - 现在更改为更简单的字段。还进行了修改以执行 ChiefrockaChris 建议的操作。

最佳答案

执行此操作的方法是将地址的#_form.html.erb View 放在地址 View 文件夹下,然后将其呈现为 client#create、client#update 等 View 中的部分 View 。例如:

#clients/_form.html.erb
<%= form_for(@client) do |f| %>
  <%= f.label :"First Name"%>
  <%= f.text_field :FirstName%>
  <%= f.label :"Middle Name"%>
  <%= f.text_field :MiddleName%>
  <%= f.label :"Last Name"%>
  <%= f.text_field :LastName%>
  <%= f.label :"Present address"%>
  <%= f.text_field :PresentAddress %>
<%= f.submit "Create Client" %>
<% end %>

然后在您的地址 View 文件夹中

#addresses/_form.html.erb
<%= form_for ([@client, @client.addresses.build]) do |f| %>
  <%= f.label :"Street Name"%>
  <%= f.text_field :street_name%>
<%= f.submit "Create Address" %>
<% end %>

然后在客户端#new:

#client/new.html.erb
<%= render "clients/form" %>
<%= render "addresses/form" %>

还要确保您的 address#create 方法中有一些内容将引用用户创建,以便将其保存在数据库中。 另外请不要将您的属性名称大写。

关于ruby-on-rails - Rails 4 - 为表单中关联表中的行分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887561/

相关文章:

ruby-on-rails - 并在方法结束时返回

ruby-on-rails - rails 4 : Reload page with ajax after submitting remote form to a different controller

sql - 以另一个变量 postgreSQL 的滞后为条件生成循环列变量

postgresql - 如何动态确定当前的 Postgres 日志文件?

python - 在列名称中使用百分号更新表

ruby-on-rails - 如何解析电子邮件或电话号码参数?

ruby-on-rails - Rails Assets 管道 - 如何包含不在 Assets 路径中的 Assets ?

ruby-on-rails - 同一模型的多个关联

sql - 地址/邮政编码和电话的部分/匹配的复杂查询帮助

sql - Postgres 没有正确排序两列