over 1 year ago

我将百宝箱最后一个作业迁移到rails101中,将post嵌套进group中,在显示post时遇到错误

正确的解答是:
Megy:那你报红的那行写法是错误的 <%= @group.posts.content %>,这个地方的posts不是单个的,而是一个数组,
所以应该循环显示:
<% @group.posts.each do |post| %>
<%= post.content %>
<% end %>

她在没有完全弄懂我的具体问题时,她的解题思路是:先是让我在rails c中执行Post.all,然后删除所有的post,执行Post.destroy_all

再新建post,执行g = Group.first 和 g.posts.create!(content: 'xx'),当我再出现user必须存在时的问题时,代码换成:g.posts.create!(content: 'xx', user_id: User.first.id)

当问题还没有解决时,她知道我的实际上在做迁移练习而不是教材练习后立马给出了答案。

遇到在rails s中报出的rollback transaction(数据初始化)错误:

点击按钮页面没有反应,,也没有报错时,遇到这种情况,可以在controller里的save后面加上 !就可以报出具体错误来

提醒:我将嵌套表单迁移到rails101中练习,将post嵌套到group中,但是post还与user有关联,所以不是一对一和一对多的两者关系,而是三者关系,不能用嵌套表单,并且posts的数量太多也不合适。但是在学习的过程中学到了其他很有知识。

以下为嵌套表单的步骤:

1.groups_controller.rb里的只在new跟edit里写入@group.posts.build, 修改
params.require(:group).permit(:xx, :xx, :posts_attributes => [:content, :xx];
2.接下来在app/model/group.rb里加入accepts_nested_attributes_for :posts;
3.在app/views/groups/form.html.erb里修改为:
<%= form_for @group do |f| %>
<%= f.label :xx %>
<%= f.text_field :xx %>
<%= f.fields_for :posts do |ff| %> (第8行)
<%= ff.label :content %>
<%= ff.text
field :content %>
<% end %>
<%= f.submit "Submit" %>
<% end %>

备注:如果你用的是simple_form的话,第8行应该是<%= f.simple_fields_for :posts do |ff| %

← 好的查询工具 百宝箱第二集 →
 
comments powered by Disqus