2016-11-16 64 views
1

我需要創建一些文本。我有一個創建行動:如何在控制器的一個動作中執行兩個動作

def create 
    @text = Text.new(text_params) 

    if @text.save 
    redirect_to text_path(@text), notice: "Text successfully created" 
    else 
    render :new 
    end 
end 

和形式:

<%= form_for @text do |f| %> 
    <div class="form-group"> 
     <label>Text name</label> 
     <%= f.text_field :name %> 
    </div> 

    <div class="form-group"> 
     <label>Description</label> 
     <%= f.text_area :description%> 
    </div> 

    <div class="actions"> 
     <%= f.submit "Save", class: "btn btn-primary" %> 
    </div> 

<%end%> 

我需要有兩個動作,當我提出我的文字。第一個動作是創建一個文本。第二個是從文本單詞中創建單詞,並且應該列出單詞列表。

創建單詞時,如果不存在,我需要創建一個if語句。


我現在有與我怎麼可以拆分並在每個字一個問題:

def create_words 
    @text.split(/\W+/) 
    @text.each do |splitted| 
    if splitted !== @words.name 
     splitted = @word 
     @word.save 
     redirect_to root_path 
    end 
    end 
+2

您應該在Text類中創建一個'after_create'回調。然後,'.split'文本並用'find_by_word'檢查數據庫中每個單詞的存在(或者Word的任何屬性用於該單詞)。該功能不屬於控制器。 –

+0

非常感謝您的幫助!我做錯了.split,你可以建議我。我在上面放置了我的代碼 – neonamo

+0

您正在分割,但是然後嘗試遍歷整個'@ text'值。嘗試使用'@ text.split(/ \ W + /)',每個都是|拆分| ...'還有,如果Word.where(value:splitted),你必須在Word中查找'splitted'。空?然後保存它。根據我所看到的,我不確定Word模型是否存在,如果不是,我建議您創建它。如果你不明白,我擔心你有更多的基本問題需要解決,特別是在Rails中創建模型關聯。 –

回答

1

最簡單的方法是做你的話的事情在after_create回調。當成功創建的文本

class Text < ApplicationRecord 
    after_create :create_words 


    private 

    def create_words 
    # do your thing here 
    end 
end 

create_words將被調用。

+0

這是偉大的,但我現在有一個問題,我如何可以拆分並將每個單詞添加到我的數據庫 – neonamo

+0

那麼,這是一個不同的問題。 –

+0

無論如何感謝! – neonamo

相關問題