Skip to content

Instantly share code, notes, and snippets.

@tienshunlo
Last active December 3, 2015 02:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tienshunlo/266e21c0d094e5cb496d to your computer and use it in GitHub Desktop.
Save tienshunlo/266e21c0d094e5cb496d to your computer and use it in GitHub Desktop.
1. MODEL
item has many item_childrens
-> user has one answersheet
2. CONTROLLER
item_controller -> user_controller
multi method -> useranswer method
3. CONTROLLER
def useranswer method end
@item_childs = ItemChild.where(:item_id => @item.id)
-> @useranswer = answersheet.where(:user_id => @user.id)
--------
@answer = Answer.where(:question_id => question.id)
--------
4. VIEW
multi.html.erb -> useranswer.html.erb
<%= form_tag multi_save_item_path do %>
<% age_list = (18..30).to_a %>
<ol>
// 如果ic有東西,會送到def multi_save的 if params[:ic],然後儲存。
<li class="template">
name<input data-name="ic[name][]"> ,
age<select data-name="ic[age][]"><%= options_for_select(age_list) %></select>
<span class="add">add</span>
<span class="del">del</span>
</li>
//ic_old的[name]跟[age]有沒有送出去,有的話,會去CONTROLLER的if params[:ic_old]
<% @item_childs.each do |old_ic| %>
<li class="old_record">
name<%= text_field_tag "ic_old[#{old_ic.id}][name]" , old_ic.name %> , name:顯示item_childs的name,值:是old_ic.name
age<%= select_tag "ic_old[#{old_ic.id}][age]" , options_for_select(age_list , old_ic.age) %></select>
<span class="add">add</span>
<span class="del">del</span>
(<%= old_ic.id %>)
</li>
<% end %>
</ol>
<button type="submit">Submit</button>
<% end %>
=>=>=>
----------------------------------------------------------------------------------------------------
<%= form_tag useranswer_save_user_path do %>
<%#= hidden_field_tag 'answersheet[answer_ids][]','' %>
<ol>
<% @question.each do |question| %>
回答新問題:
<li> <%= label_tag question.id %>
<%= label_tag question.content %>
<input type="radio" name="entry.361914725" value="不一定,只過某些特別有意義的節目" id="group_361914725_5" role="radio" class="ss-q-radio" aria-label="不一定,只過某些特別有意義的節目" required="" aria-required="true">
<% question.answer.each do |answer| %>
name<input data-name="ic[name][]"> ,
age<select data-name="ic[age][]"><%= options_for_select(age_list) %></select> <span class="add">add</span><span class="del">del</span></li>
<input type="radio" name="ic[answer_id][]" value="answer.id"> <%= label_tag answer.content %> <span class="add">add</span><span class="del">del</span></li>
<radio data-name="ic[answer_id][]" value="answer.id"> <%= label_tag answer.content %> <span class="add">add</span><span class="del">del</span></li>
</li>
<% @answersheet.each do |old_ic| %>
<li>name<%= radio_button_tag "ic_old[#{old_ic.id}][name]" , old_ic.id %> ,
age<%= select_tag "ic_old[#{old_ic.id}][age]" , options_for_select(age_list , old_ic.age) %></select>
(<%= old_ic.id %>)
</li>
<% end %>
</ol>
<button type="submit">Submit</button>
<% end %>
-------------------------------------------------------------------------------------------------------------------------
5. CONTROLLER
def multi_save
#取出所有關連id
ids = (params[:ic_old] || {}).keys.map{|i|i.to_i}
#語意:排除送出的id之外的所有隸屬item的都刪除
ItemChild.where("item_id = #{@item.id} AND id NOT IN (#{ids.join(',')})").delete_all
#更新舊的資料 ->>> ic_old的[name]跟[age]有沒有送出去,有的話,會去CONTROLLER的if params[:ic_old]
if params[:ic_old]
params[:ic_old].each_pair do |id , data|
ic = ItemChild.where(:item_id => @item.id , :id => id).first
if ic
#這邊要過 permit 或是一個一個指定都行
ic.update_attributes(:name => data[:name] , :age => data[:age])
end
end
end
#額外新增的都再塞入
if params[:ic]
params[:ic][:name].each_index do |index|
ItemChild.create(:item_id => @item.id , :name => params[:ic][:name][index] , :age => params[:ic][:age][index])
end
end
redirect_to :back
end
=>=>=>
def multi_save
#取出所有關連id
ids = (params[:ic_old] || {}).keys.map{|i|i.to_i}
#語意:排除送出的id之外的所有隸屬item的都刪除
UserAnswer.where("user_id = #{@user.id} AND id NOT IN (#{ids.join(',')})").delete_all
#更新舊的資料
if params[:ic_old]
params[:ic_old].each_pair do |id , data|
ic = Answersheet.where(:user_id => @user.id , :id => id).first
if ic
#這邊要過 permit 或是一個一個指定都行
ic.update_attributes(:answer_id => data[:answer_id])
end
end
end
#額外新增的都再塞入
if params[:ic]
params[:ic][:answer_id].each_index do |index|
Answersheet.create(:user_id => @user.id , :answer_id => params[:ic][:answer_id][index])
end
end
redirect_to :back
end
---------------------------------
@answer = Answer.where(:question_id => question.id)
<% age_list = (18..30).to_a %>
<ol>
<li class="template">
name<input data-name="ic[name][]"> ,
age<select data-name="ic[age][]"><%= options_for_select(age_list) %></select>
<span class="add">add</span><span class="del">del</span>
</li>
@answer = Answer.where(:question_id => question.id)
<ol>
<% @question.each do |question| %>
<% @answer = Answer.where(:question_id => question.id) %>
<li class="template">
<%= label_tag question.id %> <%= label_tag question.content %>
<select data-name="ic[answer_id][]"><%= options_for_select(@answer, "id", "name") %></select>
<span class="add">add</span><span class="del">del</span>
</li>
<% end %>
</ol>
select_tag "people", options_from_collection_for_select(@people, "id", "name")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment