0

私のデータベースには、部門のリストを保存したい部門と呼ばれるテキスト フィールドがあります。ユーザーはカンマ区切りで部門名を入力します。例えば:

department1, deaprtment2, department3

ユーザーがフォームを送信するときに、この値を配列として保存したいと思います。また、部門のリストをドロップダウンとして表示したいと考えています。最後に、テーブルを更新している間、部門フィールドも以前と同じように編集可能にする必要があります (コンマで区切られたテキストを入力して更新します)。

編集: これをモデルに追加しました:

class Org < ActiveRecord::Base
   serialize :department, Array
   attr_accessible :name, :department
   before_validation :update_department
   validates :name, presence: true
   def update_department
     if department_changed? and department.is_a?(String)
        self.department = self.department.split(',').collect(&:strip) 
    end
  end
end

とビュー:

<%= f.text_area :department, :cols => "10", :rows => "10" %>

今サインアップしようとするたびに、部門フィールドにはすでに [] が存在し、部門を更新しようとすると、すでに ["[部門 1"、"部門 2]"] になっています。

サインアップ時に [] を削除し、更新時に部門 1、部門 2 のみが表示されるようにします。

助けてください。

4

1 に答える 1

1

これを行う最善の方法は、モデルを使用することです。Org と呼ばれるモデルと Department と呼ばれる別のモデルがあり、2 つの間に has many 関係が定義されていると想定しています。あとは、Org モデルに次のコードを追加するだけです。

  def department_list
    departments.collect { |d| d.department_name }.join(', ')
  end

  def department_list=(text)
    if id && text
      departments.destroy_all
      text.split(',').each do |d|
        departments.create(department_name: d.strip.capitalize)
      end
    end
  end

次に、ビューで @org.department_list を使用してテキスト ボックスを追加します。

編集:

拡張された質問に基づいて、配列として保存して表示し、単純なテキスト フィールドとして編集する組織モデルに部門フィールドがあります。これについての私の考えは、部門データを組織のフィールドに保存するという考えが気に入らないということでした。これは1対多の関係であるため、部門は別のモデルにする必要があります。組織から部門フィールドを削除します。次に、部門テーブルを作成するための移行を作成します。次のようになります。

class CreateDeparments < ActiveRecord::Migration
  def change
    create_table :departments do |t|
      t.integer :org_id
      t.string :department_name

      t.timestamps
    end
  end
end

次に Department モデルに次のコード行を追加します。

belongs_to :org

組織モデルに以下を追加します。

  has_many :departments, dependent: :destroy

  def department_list
    departments.collect { |d| d.department_name }.join(', ')
  end

  def department_list=(text)
    if id && text
      departments.destroy_all
      text.split(',').each do |d|
        departments.create(department_name: d.strip.capitalize)
      end
    end
  end

コントローラーとビューには、次のものがあります。

@org = Org.first
# List of departments as an array for a select
@org.departments
# A comma separated string for text boxes
@org.department_list

department_list メソッドを使用して、リストをテキスト ボックスに表示したり、投稿および変更を元に戻したりするために使用できるようになりました。したがって、ビューコードは次のようになります。

 <%= f.text_area :department_list, :cols => "10", :rows => "10" %>

create を次のように変更して、組織コントローラーを修正する必要があるでしょう。

 def create
    @org = Org.new(params[:org])

    respond_to do |format|
      if @org.save
        @org.department_list = params[:org][:department_list]
        format.html { redirect_to org_url,
                      notice: "#{@org.name} was successfully created" }
        format.json { render json: @org,
                      status: :created, location: @org }
      else
        format.html { render action: "new" }
        format.json { render json: @org.errors, status: :unprocessable_entity }
      end
    end
 end

それでも問題が解決しない場合は、github に完全なウェブサイトがあります。あなたにとってそれは組織と部門であり、mysite では人とスキル、または人とクレジットです。これはリンクです:

https://github.com/davesexton/CKCASTING

于 2013-08-05T15:12:45.917 に答える