

Ruby on Railsとslimを使って開発をしています。  
viewに他のモデルのデータをselectするところがありますが、他のモデルの値を持ってくるのができますでようか。

例えば、bookというモデルのpaymentというモデルがあるとします。  
２つのモデルには何のリレーションもない状態です。  
ここで私がしたいのは  
bookの情報を登録するフォームで決済手段を選べるようにしたいんです。  
paymentから決済手段の種類を持ってきてそれをフォームのselectのoptionで表示するようにできますでしょうか。

下記は自分のview部分のコードです。（モデルやコントローラーなどはscaffoldで生成しました。）

[code]

    = form_for @book do |f|
      div.form-group 
        .field
          = f.label :番号
          = f.text_field :book_code, class: 'form-control', placeholder: 'Enter...'
    
[/code]


CC BY-SA 3.0
2016-03-04T06:42:53.977
22793
2016-03-06T08:59:01.470
2016-03-04T08:44:41.600
76
10710
question
ruby-on-rails
Railsで関係ない他のモデルのデータをViewにf.selectで表示する方法。


Railsのレールの沿うようなコードを書くのがベストなので、accepts_nested_attributes_forを使えるように書いてみるとよいと思います。

FYI:  
<http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for>  
<http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html>


CC BY-SA 3.0
2016-03-04T09:36:12.087
22800
2016-03-04T09:36:12.087
7373
22793
answer


いくつか選択肢はあると思いますが、`fields_for` を使う方法を紹介したいと思います。

[code]

    <%= form_for @book do |f| %>
      <%= f.text_field :xxxx %>
      <%= fields_for :payment do |pf| %>
        <%= pf.select :payment_method, @Payment.all  %>
      <% end %>
      <%= f.submit "登録" %>
    <% end %>
    
[/code]

例えばこのようなフォームを構成するとサーバー側へのリクエストはrailsのコントローラで処理する時点では

[code]

    params => { "book" => { ..... },
                "payment" => {"payment_method" => "....", ...}}
    
[/code]

みたいな具合に整形されていると思います。  
で、それぞれに

[code]

    @book = User.new(params[:book])
    payment_method = params[:payment][:payment_method]
    
[/code]

などとでもすれば必要な情報が取れるんじゃないかと。  
※この例ではストロングパラメタの部分は無視してますのでご注意下さい。


CC BY-SA 3.0
2016-03-06T08:59:01.470
22852
2016-03-06T08:59:01.470
9403
22793
answer