我在rails工作,我有一个应用程序,我希望一个用户能够从他们的用户显示页面创建另一个模型的实例。
我有两个表,一个用于用户,一个用于汽车。 我有关系设置,因此一个用户has_many:cars,每辆车belongs_to:user
当用户第一次登录时,如果user.cars = 0,我希望页面显示在用户显示页面添加汽车的表单。
我正在使用迈克尔·哈特尔的教程,这很棒,我尝试在我的情况下使用微博模型工作,但我收到一个我无法弄清楚的错误。
这是我的show.html.erb:
<p id="notice"><%= notice %></p>
<% provide(:title, @user.name) %>
<div class="userwrap">
<div class="usershow">
<div class="row">
<section>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</section>
</div>
<p>
<%= image_tag @user.image.url(:medium) %>
</p>
<p>
<strong>Name:</strong>
<%= @user.name %>
</p>
<p>
<strong>Email:</strong>
<%= @user.email %>
</p>
<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
</div>
<div class="usercars">
<%= render 'shared/carform' %>
</div>
</div>
这是车型
<%= form_for(@car) do |f| %>
<% if @car.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@car.errors.count, "error") %> prohibited this car from being saved:</h2>
<ul>
<% @car.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :nick %><br>
<%= f.text_field :nick %>
</div>
<div class="field">
<%= f.label :model %><br>
<%= f.text_field :model %>
</div>
<div class="field">
<%= f.label :make %><br>
<%= f.text_field :make %>
</div>
<div class="field">
<%= f.label :neighborhood %><br>
<%= f.text_field :neighborhood %>
</div>
<div class="field">
<%= f.label :year %><br>
<%= f.number_field :year %>
</div>
<div class="field">
<%= f.label :picture %><br>
<%= f.text_field :picture %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
这是我的控制器节目
def show
@user = User.find(params[:id])
@cars = @user.cars
end
我得到的错误是
First argument in form cannot contain nil or be empty
我想我在这个问题上已经被困了太久了。在森林里太深看树了。我相信它相对简单。汽车控制器是否应该在用户视图中处理此问题?如果是这样,我该怎么做呢?
希望我很清楚。如果你需要看其他任何东西,我很乐意发布它。谢谢你的帮助
答案 0 :(得分:0)
我应该指出两件事
基本上在你的控制器中你需要像
这样的东西def show
stuff here
@car = Car.new
end
渲染表单应该类似于
<%= render 'shared/carform', :car => @car %>
您需要像这样创建表单
<%= form_for(car) %>
或
<%= form_for(@car) %>
根据表单处理的位置,您可能需要或不需要向form_for函数添加其他参数。
答案 1 :(得分:0)
为什么不重定向用户编辑车页?喜欢以下方式:
def show
@user = User.find(params[:id])
@cars = @user.cars
redirect_to edit_car_path and return if @cars.count == 0
end