1

我正在打印用户联系人列表,并希望用户能够将每个联系人标记为“完成”。(基本上将它们从他们的待办事项列表中标记出来)。

如何更新特定联系人的 :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
4

1 回答 1

1

由于某种原因,可能由于验证规则,@contact无法保存对象。在这种情况下,else您的 create 操作中的分支未指定要呈现的内容,因此它正在寻找create模板。假设您的新操作不需要预加载其他数据,您也许可以简单地在render :action => :newor中添加一行。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
于 2012-11-07T21:31:06.373 回答