2014-01-09 43 views
0

我最近完成了Rails教程,現在我正在開發我的第一個應用程序。推進迷霧的迷霧Rails - 隱藏模型屬性_Form

我想創建一個附加到用戶的「事件」。

def create 
    @event = current_user.events.build(params[:event]) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to events_path 
    else 
    @feed_items = [] 
    render 'static_pages/home' 
    end 
end 

有了這個,我可以創建連接到用戶的「事件」,但是當我建立它會錯誤的屬性(否則)發送我「static_pages /家」。我希望它分不清什麼是錯的,這樣用戶就可以糾正

def create 
    @event = Event.new(params[:event]) 

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

在此設置下,我必須指定用戶的事件聯繫在一起的。

我該如何找到一箇中位數,它會自動將一個事件附加到特定用戶,同時將錯誤發送回表單?

感謝

大部分代碼是從Rails的教程進行修改。

回答

1

很簡單。就像你在範圍內的第一個例子中的事件到current_user,做第二個例子同樣的事情:

def create 
    @event = current_user.events.build(params[:event]) 

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

這就是說,一些很奇怪你的設置。一般來說,編寫create動作的慣用方式是創建對象,嘗試並保存它。如果成功保存,則重定向到您希望用戶去的地方。否則,你再次渲染表單。

這對你意味着什麼?那麼,使用第一個例子:

def create 
    @event = current_user.events.build(params[:event]) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to events_path 
    else 
    @feed_items = [] 

    # Change the following line to render the page that the event form is contained at 
    # This way can render any errors and display the form again 
    render 'static_pages/home' 
    end 
end 

在另一方面,你可以重定向,並在同樣的方法添加閃光:

flash[:success] = "Event created!" 
redirect_to events_path 

變爲

redirect_to events_path, success: "Event created!" 
1

你就不能添加current_user代碼如下:

def create 
    @event = current_user.new(params[:event]) 

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

如果您需要添加feed_items陣列,你可以做這樣的:

def create 
    @event = current_user.new(params[:event]) 

    respond_to do |format| 
    if @event.save 
     format.html { redirect_to @event, notice: 'Event was successfully created.' } 
     format.json { render json: @event, status: :created, location: @event } 
    else 
     format.html { 
     @feed_items = [] 
     render action: "new" 
     } 
     format.json { render json: @event.errors, status: :unprocessable_entity } 
    end 
    end 
end 

注意redirect_to將重定向瀏覽器,你將失去你的表單參數的範圍。 render將不會重定向,而是會告訴控制器呈現「新」視圖。 「新」視圖包含表單,所以這將保持表單參數的範圍,並且Rails表單助手將填寫以前提交的詳細信息。