2013-02-25 58 views
0

我有一个简单的应用程序,允许用户创建'项目'。在_form上,它要求的唯一数据是'content'和'user_id',它是当前的数字选择器,它将user_id分配给所有权的项目。但是我想要做的是让表单假定user_id是当前用户的ID(使用Devise)。这样其他人就不能将“物品”分配给其他用户。合理?这是表格。通过new_item表单传递User_ID

_form.html.erb

<%= form_for(@item) do |f| %> 
    <% if @item.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@item.errors.count, "error") %> prohibited this item from being saved:</h2> 

     <ul> 
     <% @item.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_field :content %> 
    </div> 
    <div class="field"> 
    <%= f.label :user_id %><br /> 
    <%= f.number_field :user_id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+2

你甚至都不需要user_ID的形式,你可以有内容text_field。在控制器中,您可以使用current_user.id来创建项目。 – Kaeros 2013-02-25 00:22:33

+2

在您的控制器中,而不是'Item.new',使用'current_user.items.build' – jvnill 2013-02-25 00:28:35

+0

我试图从窗体中删除user_id div部分,但是当我尝试创建一个新项目时, ... NoMethodError在上述ItemsController#显示 未定义的方法'电子邮件”的零:NilClass Rails.root:C:/网站/ railsprojects /划伤 应用程序跟踪|框架跟踪|充分跟踪 应用程序/控制器/ items_controller.rb:17:在'显示” 请求 参数: { “ID”=> “10”} 显示会话转储 显示ENV转储 响应 集管: 没有 – momchenr 2013-02-25 00:52:35

回答

0

你应该从模型协会的合作。

例如你的项目模型应该有belongs_to :user

那么你将只使用:user方法不是user_id属性。

但你真的可以做得更简单。

安装simple_forms宝石它会让你的生活更轻松。

gem "simple_form" 

然后

<%= simple_form_for(@item) do |f| %> 

    <%= f.input :content %> 

    <%= f.association :user %> 

    <%= f.button :submit %> 

<% end %>