我正在打印用户联系人列表,并希望让用户能够将每个联系人标记为“已完成”。 (基本上将它们标记为待办事项列表)。
如何更新特定联系人的:done属性?
这是隐藏字段不起作用的表单:
<% if current_user.contacts.any? %>
<% current_user.contacts.each do |c| %>
<li id="<%= c.id %>">
<%= c.name %><br/>
<%= form_for(@contact) do |f| %>
<%= f.hidden_field :done, :value=>true %>
<%= f.submit "Mark as done", class: "btn btn-small btn-link"%>
<% end %>
</li>
<% end %>
我收到此错误:
Template is missing Missing template contacts/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "C:/Sites/rails_projects/sample_app/app/views"
这是我的联系人控制器:
def create
@contact = current_user.contacts.build(params[:contact])
if @contact.save
flash[:success] = "Contact saved!"
redirect_to root_url
else
flash[:error] = "Something is wrong"
end
end
答案 0 :(得分:1)
由于某些原因,可能由于验证规则,无法保存@contact
对象。
在这种情况下,创建操作中的else
分支未指定要呈现的内容,因此它正在查找create
模板。您可以简单地向render :action => :new
或redirect_to :action => :new
添加一行,假设您的新操作不需要预加载其他数据。
else
flash[:error] = "Something is wrong"
redirect_to :action => :new
end
您也可以使用respond_with
代替显式重定向,如果发现错误,将会呈现new
操作:
def create
@contact = current_user.contacts.build(params[:contact])
if @contact.save
flash[:success] = "Contact saved!"
else
flash[:error] = "Something is wrong"
end
respond_with @contact, :location => root_url
end