2011-10-31 67 views
1

我有2點控制器的方法創建並顯示傳遞參數(導軌)

def create 
    @message2 = Message.new(params[:message]) 
    if @message2.valid? 
    @message2 = current_user.sent_messages.create(params[:message])   
     redirect_to @message2.receiver  
    else 
     redirect_to :back 
    end 
end 

def show 

    @message = Message.find(params[:id]) 
    if [email protected] 
    @message.is_read=true 
    @message.save 
    @message2=Message.new(:receiver_id=>@message.sender, :sender_id=>current_user,:theme=>@message.theme) 
    else 
    @message2=Message.new(:receiver_id=>@message.receiver, :sender_id=>current_user,:theme=>@message.theme) 
    end 


end 

我的形式

= form_for(@message2) do |f| 

    %p 
    Content: 
    %br 
    = f.text_area :content ,:rows => 5,:id => "text_area", 
       :cols => 45 

    .actions 
    = f.submit 
在放映視圖

我有形式它初始化@ message2.content,但是創建動作會清除我在show action中設置的所有參數,並僅設置內容值。如何讓我的表單追加參數(不要清理舊的)?

+0

請幫忙,非常需要解決這個問題 – Pavel

+0

我真的不明白你想做什麼?你能發表你的觀點嗎?注意:您的節目按合約只能顯示訊息,您爲什麼要在節目中更新和創建新訊息? – Cygnusx1

+0

因爲我沒有創建params [:id];我開始用show方法初始化@ message2。並希望在創建過程中繼續初始化。但我不知道如何,我只能創建新的行爲。我是新手,我知道有這樣做的方式,但我不知道他們是什麼( – Pavel

回答

1
def create 
    @message2 = current_user.sent_messages.new(params[:message])   
    if @message2.save 
    redirect_to @message2.receiver  
    else 
    render :action => :show 
    end 
end 

以下是您的create操作的外觀。這是一個常用的Rails習慣用法。

它會正確呈現表單,因爲實例變量仍然存在。

+0

嗯,它會有:receiver_id和:sender_id初始化?就像我已經初始化在我的show動作中?原因在我的情況下創建動作是在show動作後執行 – Pavel

+0

您必須添加'f.hidden_​​field:receiver_id'和':sender_id'表單。 –

+0

謝謝,這就像我做的,但1人告訴我,這是不好的方式,他是對的嗎?我總是需要使用隱藏的領域?例如,如果我將有2種形式1模型(1形式初始化1參數,第二秒),我需要使用隱藏字段? – Pavel