Rails:如何创建新的嵌套资源?

时间:2011-07-17 15:56:48

标签: ruby-on-rails

在我的应用中,用户有对话,对话有消息。消息既属于用户(作为作者)又属于对话。

我想创建一个新消息。这是我现在在MessagesController中使用的代码。

def new
  @user = current_user #currently logged in user
  @conversation = Conversation.find(params[:id])
  @message = @conversation.messages.build
end

def create
  @conversation = Conversation.find(params[:conversation_id])
  @message = @conversation.messages.build(params[:message])
  if @message.save
    redirect_to username_conversation(current_user, @message.conversation)
  else
    redirect_to root_url
  end
end

params [:message]包含消息内容(“content”=>“我是斯巴达克斯”)。

这不起作用(可能是因为我在创建新消息时没有指定用户/作者?)。如何使这项工作成为Rails方式?

感谢。

1 个答案:

答案 0 :(得分:3)

您需要手动设置用户。只能使用Rails提供的简短方法设置一个属性。

def new
  @user = current_user #currently logged in user
  @conversation = Conversation.find(params[:id])
  @message = @conversation.messages.build
  @message.user = user
end

def create
  @conversation = Conversation.find(params[:conversation_id])
  @message = @conversation.messages.build(params[:message])
  @message.user = current_user
  if @message.save
    redirect_to username_conversation(current_user, @message.conversation)
  else
    redirect_to root_url
  end
end