2011-10-31 50 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