2012-01-10 50 views
0

手動執行「創建」功能有什麼辦法嗎? 我有一個腳手架,(模型/控制器/視圖),所以我想要做的就是改變一點點用戶給我的參數。「Def create」手動導軌

def create 

    @meme = Meme.new(params[:meme]) 

    respond_to do |format| 
    if @meme.save 
     format.html { redirect_to @meme, notice: 'Meme was successfully created.' } 
     format.json { render json: @meme, status: :created, location: @meme } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @meme.errors, status: :unprocessable_entity } 
    end 
    end 
end 

有沒有做這樣的事情的任何方式:

def create 

    @meme = Meme.new 
    @meme.name = params([:name]) 
    @meme.id = params([:id]) 
    @meme.url = @[email protected] 




    respond_to do |format| 
    if @meme.save 
     format.html { redirect_to @meme, notice: 'Meme was successfully created.' } 
     format.json { render json: @meme, status: :created, location: @meme } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @meme.errors, status: :unprocessable_entity } 
    end 
    end 
end 

所以你可以在最後一個例子看,我要保存URL串連名稱和ID, 有什麼辦法從控制器實現這一點。

在此先感謝。

回答

2

你正在尋找的代碼是那種既你們的樣品的組合:

def create 

    @meme = Meme.new(params[:meme]) 
    @meme.url = "#{@meme.name}-#{@meme.id}" 

    respond_to do |format| 
    if @meme.save 
     format.html { redirect_to @meme, notice: 'Meme was successfully created.' } 
     format.json { render json: @meme, status: :created, location: @meme } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @meme.errors, status: :unprocessable_entity } 
    end 
    end 
end 

我的名字和ID只是踢之間的破折號扔。

您可能還想考慮在Meme模型內部的before_save掛鉤中執行此操作,這將是比在控制器中更清潔的解決方案。祝你好運!

+0

非常感謝您的回答,它像一個魅力,呵呵,但你讓我想如果正確的方法是在模型中做它,我如何處理模型中的數據,我嘗試了這樣的' def before_save(model) @ meme.url =「ok」 end' – 2012-01-10 08:23:57

+1

@Mau:'before_save'是[callback](http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks),不是方法名稱。你需要'before_save:set_url'然後'def set_url ...'來設置URL。 – 2012-01-10 08:29:21

+1

http://pastie.org/3159016 – ctcherry 2012-01-10 08:30:57