0

すべて、2つのドロップダウンボックスがあり、2つの異なるデータベーステーブルと1つの送信ボタンを備えたフォームから入力されます。私の目標は、フォームの送信時に2つの値を連結し、モデルに関連付けられたフォームに1つの値をデータベースに書き戻すことです。

もっと簡単に言うと、['red'、'green'、'blue']と['dog'、'cat']を選択できる2つのドロップボックス。ユーザーが「red」と「cat」を選択すると、送信ボタンによって新しいレコード「red-cat」(ブログ名モデルの下)が作成されます。

フォーム全体(new.html.erb)コード:

<%= select("subdomainw1", "blognamew1", Subdomainw1.order("blognamew1 ASC").collect {|p| [ p.blognamew1  ] }, {:prompt => 'Select Adjective'}) %>
<%= select("subdomainw2", "blognamew2", Subdomainw2.order("blognamew2 ASC").collect {|p| [ p.blognamew2  ] }, {:prompt => 'Select Noun'}) %>

<%= simple_form_for (@blogname) do |f| %>
 <%= f.button :submit %>
<% end %>

関連するコントローラーdefcreateは次のとおりです。

 def create
    @blogname = Blogname.new(params[:blogname])
    respond_to do |format|
      @blogname.blogname = ?? THIS SHOULD BE A CONCATENATION OF THE VALUES FROM ABOVE SELECTS
        if @blogname.save
        format.html { redirect_to @blogname, notice: 'Blog was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end

ここに何かアイデアはありますか?

4

1 に答える 1

0

これを行うには多くの方法があります。Rails の方法では、モデルでそれを行い、コントローラーをスリムに保ちます。

レールでこれが行われる最も一般的な方法はコールバックだと思います。したがって、この例では、モードで before_validation (または、ブログが編集された場合に変更したくない場合は before_create) コールバックを設定し、他の 2 つの属性からブログ名を割り当てることができます。

model.rb

before_validation :generate_blogname

def generate_blogname
   self.blogname ||= "#{blognamew1}-#{blognamew2}".parameterize
end

次に、コントローラーで:

 controller.rb

 def create
    @blogname = Blogname.new(params[:blogname])

    respond_to do |format|
       if @blogname.save
        format.html { redirect_to @blogname, notice: 'Blog was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
 end

パラメータ化メソッドは、特殊文字を取り除くことで、サブドメインに対してこれを機能させます。モデルはおそらく blogname と呼ばれるべきではなく、おそらく name の属性を持つテーブル blog であるべきです。したがって、@blog = Blog.new の場合、@blog.name = "2 つのサブドメイン値"

于 2013-01-29T00:46:20.763 に答える