对于我的项目,我尝试了解如何让来自不同表的单个视图的数据视图。我试图实现Ruby on Rails教程(http://ruby.railstutorial.org/chapters/user-microposts#sec:a_micropost_model)的例子。 在这个例子中,我能够在用户的页面上看到用户的微博。那我在做什么?
rails generate scaffold user name:string
+ rake db:migrate rails generate scaffold micropost content:string user_id:integer
def self.up (...)
add_index :microposts, :user_id
add_index :microposts, :created_at
end
belongs_to :user
&用户模型 has_many :microposts
<% unless @user.microposts.empty? %> <%= render @microposts %> < %end% >
<% = micropost.content %> posted <% = time_ago_in_words(micropost.created_at)%> ago
我已经填写了一些内容,rails控制台说rails已经知道两个表之间的链接。 无论如何,如果我打开show动作,我会收到一些错误:
NoMethodError in Users#show
Showing c:/src/script/testtest2/app/views/users/show.html.erb where line #13 raised:
undefined method `model_name' for NilClass:Class
Extracted source (around line #13):
10: </p>
11:
12: <% unless @user.microposts.empty? %>
13: <%= render @microposts %>
14: <% end %>
15:
16: <%= link_to 'Edit', edit_user_path(@user) %> |
Rails.root: c:/src/script/testtest2
Application Trace | Framework Trace | Full Trace
app/views/users/show.html.erb:13:in `_app_views_users_show_html_erb___161211003_22878180__702430867'
app/controllers/users_controller.rb:18:in `show'
Request
Parameters:
{"id"=>"1"}
看起来rails不喜欢“渲染”,所以我做错了什么?不幸的是,我跳过了本教程的一些章节,因为我只是想知道如何在用户显示页面上列出微博。我需要定义更多吗?在本教程中,有更多的代码,但是这段代码还包含了很多css-Stylesheet的定义,所以我很困惑哪些代码对于简单地解决我的问题是非常必要的。
答案 0 :(得分:0)
将show.html.erb中的<%= render @microposts %>
替换为<%= render @user.microposts %>