2012-01-23 40 views
0

首先,我有一些使用form_for從另一個模型視圖的方式似乎每個人都說它的工作原理。即「from」character/index.html.erb'form_for(@character,@statistic)do ......「 是的,該方法看起來很簡單,我很樂意使用它,但它不會爲我工作,所以顯然即時做「IT」錯誤。以下是我目前的設置和問題。首先使用form_for是上班的噩夢,但更重要的是,每當我點擊提交表單時,它會以某種方式重複發佈帖子。鐵路,從form_for從另一個模型視圖重複張貼

events_controller.rb

... 
    def show 
    @event = Event.find(params[:id]) 
    @message = @event.messages.build 
    @locations = Location.all 
    @city = Location.find_by_city(params[:city]) 
    @messages = @event.messages.limit(5).order('created_at DESC') 
    end 
... 

Messages_controller.rb

... 
    def create 
    @message = Message.create(params[:message]) 
    @message.event_id = params[:event_id] 
    @message.save 
    respond_to do |format| 
     format.js {@message} 
    end 
    end 
... 

事件/ show.html.erb

... 
     <%= form_for([@event, @message], :remote => true) do |f|%> 
    <%= f.text_field :msg %> 
    <%= f.hidden_field :name, :value => current_requester.name %> 
    <%= f.submit "send"%> 
     <% end %> 
... 

在你想知道的情況下,JS響應和作品罰款更新我指出的div。

Development.log

開始發表MessagesController# 「/事件/ 4 /郵件」 爲127.0.0.1,在太陽1月22日18時19分57秒 -0600 2012處理創建爲JS參數:{ 「commit」=>「send」,「event_id」=>「4」, 「authenticity_token」=>「OjW6XyzwCbCgXfu74Qy1VYjJm5 + YGIjw9f + yH + 2pi04 =」, 「utf8」=>「✓」,「message」=> { 「名稱」=> 「克里斯」, 「MSG」=> 「FD」}} SQL (0.1毫秒)BEGIN SQL(0.5毫秒)描述messages AREL(0.2ms的) INSERT INTO messagescreated_atnameupdated_atevent_id,msg)VALUES('2012-01-23 00:19:57','Chris','2012-01-23 00:19:57',NULL,'fd')SQL(85.4ms)COMMIT SQL(0.1ms)BEGIN
AREL(0.4ms)UPDATE messages SET updated_at ='2012-01-23 00:19:57',event_id = 4其中messagesid = 25 SQL(89.6ms) COMMIT呈現消息/ _message.html.erb(0.2ms)呈現 messages/create.js.erb(1.4ms)在198ms中完成200 OK(查看:8.6ms | ActiveRecord:176.5 ms)

在Sun Jan 22 22:19:57 -0600上啓動POST「/ events/4/messages」爲127.0.0.1 2012 MessageController處理#create as JS參數:{「event_id」=>「4 「, 」authenticity_token「=>」OjW6XyzwCbCgXfu74Qy1VYjJm5 + YGIjw9f + yH + 2pi04 =「, 」utf8「=>」✓「,」message「=> {」name「=>」Chris「,」msg「=> (0.1ms)BEGIN SQL(0.3ms)描述messages AREL(0.2ms) INSERT INTO messagescreated_atupdated_atevent_idmsgname)VALUES( '2012-01-23 0點19分57秒', '2012-01-23 0點19分57秒',NULL, '的fd', '克里斯') SQL(89.6ms)COMMIT SQL(0.1ms)BEGIN AREL (0.3ms)UPDATE messages SET updated_at ='2012-01-23 00:19:57', event_id = 4其中messagesid = 26 SQL(64.0ms)COMMIT Rendered messages/_message.html.erb(0.2ms)Rendered messages/create.js.erb(1.2ms)在174ms中完成200 OK(查看:7.1ms | ActiveRecord:154 。爲6ms) n0de @ IbeSuperMadtron:〜/工作區/ RadioMint /登錄$

添加在模型中,如果有人問。

class Message < ActiveRecord::Base 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    include Geocode 

    belongs_to :disk_jockey 
    belongs_to :venue 

    has_many :song_requests 
    has_many :fresh_song_requests, :conditions => "played = false", :class_name => "SongRequest" 
    has_many :requested_songs, :through => :song_requests, :source => 'song', :order => 'songs.created_at ASC' 
    has_one :poll 
    has_many :messages 
    has_many :event_playlists 
    has_many :playlists, :through => :event_playlists 

    # I havent figured out the issue as to why messages dont show up when a validation is not met 
    # I have used the ':message => "" ' tailed to the end of these validations but they never show up. 
    validates_presence_of :name, :disk_jockey_id 
    validates :code, :uniqueness => true, :presence => true 
... 
end 

回答

0

我不明白爲什麼你需要@event,使之成爲form_for。我假設你只是希望它成爲一個爲特定事件創建消息的表單?只是使它:

<%= form_for @message, :remote => true do |f| %> 

您已經聲明@message@event通過分配相關聯,所以,除非你擁有的@event屬性輸入字段,你並不需要包括在form_for@event


但如果你真的這樣做,而不是在form_for使用兩種模式需要爲事件數據輸入,也許你可以試試下面的另一種方法。在您的events.rb模型文件,添加:

accepts_nested_attributes_for :messages 

那麼在你看來,做這樣的事情:

<%= form_for([@event, @message], :remote => true) do |f|%> 
    <%= f.fields_for :message do |m| %> 
    <%= m.text_field :message_field %> 
    <% end %> 
<% end %> 
相關問題