2016-05-06 42 views
0

當用戶點擊submit如何傳遞來自兩個不同模型/數據庫表的信息?用一個提交保存兩個模型(屬於第三個模型)?

用戶應該可以在missed_dates表格中創建一個note,然後該註釋應該保存到錯過的日期所指的相應@challenge

missed_dates/form.html.erb

<%= simple_form_for(@missed_date, url: challenge_missed_dates_path({ routine_id: @challenge }), remote: request.xhr?, html: { data: { modal: true } }) do |a| %> 
<%= form_for [@notable, @note] do |b| %> 
    <%= a.text_field :one %> 
    <%= b.text_field :two %> 
    <%= button_tag(type: 'submit') do %> 
    Save 
    <% end %> 
<% end %> 
<% end %> 

missed_date.rb

class MissedDate < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :challenge 
end 

missed_date_controller

def new 
    @challenge = current_user.challenges.find(params[:challenge_id]) 
    @missed_date = current_user.missed_dates.build 
    @notable = @challenge 
    @note = Note.new 
    end 

    def create 
    challenge = current_user.challenges.find(params[:challenge_id]) 
    challenge.missed_days = challenge.missed_days + 1 
    challenge.save 
    @missed_date = challenge.missed_dates.build(missed_date_params) 
    @missed_date.user = self.current_user 
    @missed_date.save 
    respond_modal_with @missed_date, location: root_path 
    flash[:alert] = 'Strike added' 
    end 

回答

1

Short:使用Note和MissedDates之間的「belongs_to」和「has_many:through」關聯。然後你可以使用嵌套屬性。

長版本:這可能是您的模型結構不正確或不完整的問題。通常,您可以使用嵌套屬性(請參閱http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)來實現此目的。

但是,這意味着模型有直接關係。您應該考慮是否可以在音符和missed_date模型之間執行belongs_to/has_many關係。這可以通過例如通過「has_many:through ...」(http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association),而無需更改當前的數據庫方案。

+0

所以你說我在表單中正確無誤?我嘗試過,但仍然出現錯誤。我認爲這可能是因爲'submit'不知道,要提交哪個表單? –

+0

請看看http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join-model - 它解釋瞭如何在整個連接表中使用嵌套模型和表單。您是否使用過「has_many:through」,是否添加了「accep_nested_attributes_for」?您是否在聯接模型和目標模型上調用了「構建」?如果你做了所有這些請求。給我一個關於你實際做了什麼的筆記,明天我會試着設置一個工作示例(現在是0點30分,所以要睡一會兒...) –

相關問題