Last active
December 3, 2015 02:00
-
-
Save tienshunlo/266e21c0d094e5cb496d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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