Ruby on rails 嵌套对象有一个关系

Ruby on rails 嵌套对象有一个关系,ruby-on-rails,ruby,ruby-on-rails-4,web,Ruby On Rails,Ruby,Ruby On Rails 4,Web,我是rails新手,我尝试用两个对象做一个crud,并且有一个关系,我有一个项目和相册,每个项目和相册只有一个:name属性。但是当我创建一个项目时,两个名称都是空的。这是我的密码: project.rb,album.rb class Project < ActiveRecord::Base has_one :album accepts_nested_attributes_for :album, allow_destroy: true end class Album < Act

我是rails新手,我尝试用两个对象做一个crud,并且有一个关系,我有一个项目和相册,每个项目和相册只有一个:name属性。但是当我创建一个项目时,两个名称都是空的。这是我的密码:

project.rb,album.rb

class Project < ActiveRecord::Base
 has_one :album
 accepts_nested_attributes_for :album, allow_destroy: true
end

class Album < ActiveRecord::Base
 belongs_to :project
end
_form.html.erb(项目)

由表格提交

    Started POST "/projects" for ::1 at 2016-01-22 18:39:16 -0200
Processing by ProjectsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"asJbsifN/NB2/LGY0xb8S0+OnsRlJMJqhVe3vUOzEyLPAMQN1VFcDiFOwSNcXu+V1wZ78obnc6uaacCzxDdW8A==", "project"=>{"name"=>"test", "album_attributes"=>{"name"=>"test"}}, "commit"=>"Create Project"}
   (0.2ms)  begin transaction
  SQL (0.3ms)  INSERT INTO "projects" ("name", "created_at", "updated_at") VALUES (?, ?, ?)  [["name", "test"], ["created_at", "2016-01-22 20:39:16.515028"], ["updated_at", "2016-01-22 20:39:16.515028"]]
  SQL (0.1ms)  INSERT INTO "albums" ("name", "project_id", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "test"], ["project_id", 7], ["created_at", "2016-01-22 20:39:16.517545"], ["updated_at", "2016-01-22 20:39:16.517545"]]
   (0.6ms)  commit transaction
Redirected to http://localhost:3000/projects/7
Completed 302 Found in 7ms (ActiveRecord: 1.3ms)
my projets/show.html.erb

<p id="notice"><%= notice %></p>

<p>
  <strong>Project Name:</strong>
  <%= @project.name %>
</p>

<p>
  <strong>Album Name:</strong>
  <%= @project.album.name %>
</p>



<%= link_to 'Edit', edit_project_path(@project) %> |
<%= link_to 'Back', projects_path %>
对于在视图上显示project:name,project.find解析,我找到了该Album.take,它可以在同一视图上显示Album:name

Obs:take方法检索记录时没有任何隐式排序。
Obs2:显示视图保持不变。

创建
操作中,需要执行以下操作:

def create
 @project = Project.new project_params
 # Don't need to create dependent objects

 respond_to do |format|
    if @project.save
      ...
您不需要单独创建
相册
;所有其他代码看起来都应该可以工作。如果没有,您将需要从您的表单中发布提交的参数(我可以向其中写入更新)

--

更新

要在视图中显示相册,只需调用关联方法:

#app/controllers/projects_controller.rb
def show
   @project = Project.find params[:id]
end

#app/views/projects/show.html.erb
<% @project.albums.each do |album| %>
   <%= album.title %>
<% end %>
#app/controllers/projects_controller.rb
def秀
@project=project.find参数[:id]
结束
#app/views/projects/show.html.erb

您是否已更新控制器以允许您修改project中的相册属性?您是指project\u控制器上的白名单参数?params.require(:project).permit(:name,相册属性:[:name])应该是
@project=project.new(project\u params)
:)半途而废,插入了项目名称,但相册名称仍然为空。好的,你能给我们看看从表单发送的参数吗?我的项目表单在上面,我在表单中发送project:name,在表单中发送fields\u,但我需要查看表单提交的内容。要获得它,您只需在单击“提交”时复制控制台上发送的请求-它将向我们显示从表单发送的参数和值,这将使我们能够看到哪里可能出错
<p id="notice"><%= notice %></p>

<p>
  <strong>Project Name:</strong>
  <%= @project.name %>
</p>

<p>
  <strong>Album Name:</strong>
  <%= @project.album.name %>
</p>



<%= link_to 'Edit', edit_project_path(@project) %> |
<%= link_to 'Back', projects_path %>
  def show
    @project = Project.find(params[:id])
    @album = Album.take
  end

  def create
    @project = Project.new(project_params)
  end 
def create
 @project = Project.new project_params
 # Don't need to create dependent objects

 respond_to do |format|
    if @project.save
      ...
#app/controllers/projects_controller.rb
def show
   @project = Project.find params[:id]
end

#app/views/projects/show.html.erb
<% @project.albums.each do |album| %>
   <%= album.title %>
<% end %>