何に使うの?って内容ですが、自分用の備忘録です。
学習1か月ほどなので参考にはならないと思います。
メモ書きレベル
#参考
railsでラジオボタンを作る方法(モデル連携なし版)
https://ch.nicovideo.jp/tokyo-webs/blomaga/ar222386
Railsのform_tagで生成されるHTML
https://maeharin.hatenablog.com/entry/20120811/p1
Ruby :: ハッシュを配列に変換する
http://tm.root-n.com/programming:ruby:etc:hash2array
Ruby - 配列やハッシュの繰り返し each
http://azuuun-memorandum.hatenablog.com/entry/2016/04/12/213839
Ruby on Rails データ更新
https://qiita.com/shell/items/c9869809cba91e9c35a1
【Rails 5】(新) form_with と (旧) form_tag, form_for の違い
https://qiita.com/hmmrjn/items/24f3b8eade206ace17e2
#コード
controller
def show
@workspace = Workspace.find(params[:id])
@photos = @workspace.photos.all
@users = User.all
end
view
# userの人数分テーブルを横に伸ばす
<% @users.each do |user| %>
<th><%= user.name %></th>
<% end %>
</tr>
#photoの枚数分レコードを表示
<% @photos.each do |photo| %>
<tr>
<% @users.each do |user| %>
<td>
<div class="btn-group btn-group-xs btn-group-vertical" data-toggle="buttons" role="group">
#helperにアクション記述
<% get_relation(photo, user) %>
helper
# photo一枚毎のリレーションを取得する
def get_relation(photo, user)
relationship = Relationship.where(photo_id: photo.id).where(user_id: user.id).first
@target1 = ""
@target2 = ""
if relationship
if relationship.target == 1 then
@target1 = " active"
end
if relationship.target == 2 then
@target2 = " active"
end
else
end
end
view
# helperで生成した文字列でデフォルト値を設定
#トグルボタンは同じname属性でグルーピングされるのでidを文字列結合してあとで取得できるように
<label class="btn btn-default<%= @target1 %>">
" 1 "<%= radio_button 'target', photo.id.to_s + '_' + user.id.to_s , 1, {} %>
</label>
<label class="btn btn-default<%= @target2 %>">
" 2 "<%= radio_button 'target', photo.id.to_s + '_' + user.id.to_s , 2, {} %>
</label>
</div>
</td>
<% end %>
</tr>
<% end %>
</table>
<%= submit_tag ' 送信する ' %>
<% end %>
controller
def create
@relationship_keys = params[:target]
@relationship_keys.each do |key,value|
key = key.split("_")
photo_id = key[0]
user_id = key[1]
relationship = Relationship.where(photo_id: photo_id ).where(user_id: user_id).first
if relationship
relationship.target = value
else
relationship = Relationship.new(user_id: user_id, photo_id: photo_id, target: value)
end
if relationship.save
else
end
end
flash[:success] = 'stasu更新完了'
redirect_to workspace_path(params[:workspace_id])
end