2010-12-07 9 views
8

मेरे पास दो मॉडल के बीच स्थापित है Imany और belong_to एसोसिएशन है: परियोजना और कार्य।रेल: नए बच्चे के रिकॉर्ड बनाते समय मौजूदा माता-पिता का चयन करने के लिए फॉर्म?

मैं एक ऐसा फॉर्म बनाने में सक्षम होना चाहता हूं जो मुझे एक नया कार्य बनाने और माता-पिता के रूप में मौजूदा प्रोजेक्ट असाइन करने में सक्षम बनाता है। उदाहरण के लिए, मौजूदा प्रोजेक्ट की सूची से चयन करने के लिए इस फॉर्म में पुलडाउन हो सकता है।

इस एप्लिकेशन में केवल परियोजनाओं का एक सीमित सेट उपलब्ध है, इसलिए मैंने बीजों.आरबी फ़ाइल के माध्यम से परियोजना रिकॉर्ड बनाए हैं। मुझे नई परियोजनाओं के निर्माण के लिए एक फॉर्म बनाने की जरूरत नहीं है।

मेरा मानना ​​है कि मैंने नए कार्य फ़ॉर्म में collection_select फॉर्म हेल्पर टैग का उपयोग कर समाधान प्राप्त किया है। मैं इस बात से बहुत खुश हूं कि यह अब कैसे काम करता है, लेकिन अगर इस समस्या के अन्य दृष्टिकोण हैं तो बस उत्सुक हैं।

#models/project.rb 
class Project < ActiveRecord::Base 
    has_many :tasks, :dependent => :destroy 
end 

#models/task.rb 
class Task < ActiveRecord::Base 
    belongs_to :project 
end 

#controllers/tasks_controller.rb 
class TasksController < ApplicationController 

    def new 
    @task = Task.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @task } 
    end 
    end 

    def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to(@task, :notice => 'Task was successfully created.') } 
     format.xml { render :xml => @task, :status => :created, :location => @task } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @task.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 
end 

#views/new.html.erb 
<h1>New task</h1> 

<%= form_for(@task) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="select"> 
    <%= collection_select(:task, :project_id, Project.all, :id, :name) %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

<%= link_to 'Back', tasks_path %> 

उत्तर

8

मैंने अभी आपके कोड की समीक्षा की और यह मेरे लिए शानदार लग रहा है। एक छोटी सी ट्वीक:

<%= f.collection_select(:project_id, Project.all, :id, :name) %> 

यह सिर्फ थोड़ा कि में क्लीनर आप अभी भी |f| ब्लॉक चर

+1

धन्यवाद! यह भी पता लगाने की कोशिश कर रहा था कि कैसे छुटकारा पाना है: उस लाइन पर भी कार्य। – Chanpory

2

उपयोग कर रहे हैं जब से तुम दूसरे दृष्टिकोण उल्लेख किया है, मैं निश्चित रूप से उल्लेख है और वास्तव में सलाह देते हैं, आप formtastic का उपयोग होता है। एसोसिएशन स्वचालित रूप से संभाले जाते हैं और आपके कोड को साफ रखता है और आपको कुछ बेहतरीन अनुकूलन विकल्प भी देता है।

+1

ओह शांत, मेरे पास फॉर्मेटास्टिक नहीं था। इसे जांच लेंगे! – Chanpory

संबंधित मुद्दे