2013-02-25 19 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 %>