如何在传入Params的Rails中使用Rails检测

时间:2014-11-20 15:25:22

标签: ruby-on-rails

所以最近我找到了一种在rails中使用detect来从文本中获取网址的方法......但是如果可能的话,这对我来说也非常有用。

我的控制器抓取一些信息并根据传入的参数创建了一个新的数据库条目,看起来像这样;

    @received_msg = Message.create(:content => params[:Text], :user_id => user.id, :status => 'new') 

现在,我希望在我的控制器中使用detect创建操作,我可以在:content搜索特定的文本或符号,并允许我的用户在内容中定义一些内容,但我会将其分配给不同的列。我确定这不清楚所以让我举例说明。

实施例

假设我的用户发送的内容是这样的消息;

   "Hey there, you should check this type of website out and make sure that its good to go" 

现在,我正在为提交此邮件的用户分配USER_ID,但在用户提交之前,原始所有者可能是其他人。所以我想我会允许我的user_id在其邮件中输入@John,这意味着邮件的原始所有者是JOHN ..新邮件看起来像这样;

   "Hey there, you should check this type of website out and make sure that its good to go @John"

现在在我的控制器中,当该消息被创建为记录时,我想取JOHN并将其分配给列username,例如;我认为这样的东西会起作用,但它给我的错误.detect未定义..

   @received_msg = Message.create(:content => params[:Text], :user_id => user.id, :status => 'new', :username => (params[:Text].detect {|original_sender| original_sender.start_with? "@"))

也许括号太多了?

1 个答案:

答案 0 :(得分:0)

你最后遗漏了}

@received_msg = Message.create(:content => params[:Text], :user_id => user.id, :status => 'new', :username => (params[:Text].detect {|original_sender| original_sender.start_with? "@"}))

你也可以使用下面的内容

@received_msg = Message.create(:content => params[:Text], :user_id => user.id, :status => 'new', :username => params[:Text].split.find{|w| w.start_with?("@")})