2017-06-07 3 views
-4

トピックと詳細を適切なテキストフィールドとエリアに入力した後、 ""トピックは空ではありません "。何が問題ですか?私はそれを把握していないようだ。レールで作業中、テキストを受け取るためのテキストフィールドとテキストエリアがありますが、「トピックは空ではありません」という妥当性チェックエラーが表示されます

This is the task partial 
_task.html.erb: 

<li id="task-<%= task.id %>"> 
     <%= link_to gravatar_for(task.user, size: 50), task.user %> 
     <span class="task"><%= link_to task.user.name, task.user %></span> 
     <span class="topiclabel">Title:</span> 
     <span class="topic"style=color:black> <%= task.topic %></span> 
     <span class="detailslabel">Details: </span> 
     <span class="detail"><%= task.detail %></span> 
     <span class="timestamp"> 
     Posted <%= time_ago_in_words(task.created_at) %> ago. 
     </span> 
</li> 

Schema: 

ActiveRecord::Schema.define(version: 20170526194708) do 

    create_table "stages", force: :cascade do |t| 
    t.text  "topic" 
    t.datetime "duration" 
    t.text  "detail" 
    t.integer "task_id" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["task_id"], name: "index_stages_on_task_id" 
    t.index ["user_id", "created_at"], name: "index_stages_on_user_id_and_created_at" 
    t.index ["user_id"], name: "index_stages_on_user_id" 
    end 

    create_table "tasks", force: :cascade do |t| 
    t.text  "topic" 
    t.integer "member" 
    t.text  "detail" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["user_id", "created_at"], name: "index_tasks_on_user_id_and_created_at" 
    t.index ["user_id"], name: "index_tasks_on_user_id" 
    end 

routes.rb: 

resources :tasks,   only: [:create, :destroy] 

task.rb 
class Task < ApplicationRecord 
    belongs_to :user 
    has_many :stages 
    default_scope -> { order(created_at: :desc) } 
    validates :user_id, presence: true 
    validates :topic, presence: true, length: { maximum: 140 } 
    validates :detail, presence: true, length: { maximum: 140 } 

end 

Project_pages_controller.rb:これは私のコントローラである

<div class="col-md-8"> 
    <% if @user.tasks.any? %> 
     <% if @user.stages.any? %> 
     <h3>Tasks (<%= @user.tasks.count %>)</h3> 
     <ol class="tasks"> 
     <%= render @tasks %> 
     <%= render @stages %> 
     </ol> 
     <%= will_paginate @tasks %> 
     <% end %> 
    <% end %> 
    </div> 

def home 
    if logged_in? 
     @task = current_user.tasks.build 
end 


_task_form.html.erb: 

<%= form_for(@task) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_field :topic, placeholder: "Compose new task..." %> 
    <%= f.text_area :detail, placeholder: "Write task details..." %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-primary" %> 
<% end %> 


This is the show page 

show.html.erb。

class TasksController < ApplicationController 
    include TasksHelper 
    before_action :logged_in_user, only: [:create, :destroy] 

    def create 
    @task = current_user.tasks.build(task_params) 
    if @task.save 
     flash[:success] = "Task created!" 
     redirect_to root_url 
    else 
     @feed_items = [] 
     render 'workshareapp_pages/home' 
    end 
    end 

    def destroy 
    end 

    private 

    def task_params 
     params.require(:task).permit(:detail) 
    end 

end 
+1

コントローラはどこですか? –

+0

投稿したコントローラが完全ではないようです。 'update'や' create'メソッドはどこにありますか?あなたのオブジェクトをどこに保存していますか? – Bustikiller

+0

強力なパラメータを使用して属性を正しく許可していますか? –

答えて

0

検証:トピック、プレゼンス:真、長さ:{最大:140} この句は、レコード内のトピック属性が存在し、140文字の長さの範囲内であることを検証します。これは、保存前にレコードを検証するために使用されます。もしあなたが本当にここでそれを必要としないなら、それを取り除くことができます。別のオプションとして、このフォーム専用に使用されるフォームモデルを作成することもできます。

+0

どうすればいいのですか?また、タスクモデルに既に添付されているので、フォームにリンクする方法を教えてください。 –

+0

私は検証を削除しましたが、投稿したときにページに表示されましたが、タイトルが空で、text_fieldのテキストが見えなかったという事実に戻りました。詳細はテキスト領域で表示されます。 –

+0

これはうまくいかず、明らかにテキストエリアに入力されたテキストを取り上げることになりました。 –

0

おそらくあなたのモデルのタスクの検証です。

+0

モデルタスクに添付されている検証を先に削除する必要がありますか? –

+0

私は検証を削除しましたが、投稿したときにページに表示されましたが、タイトルが空で、text_fieldにテキストが表示されなかったという事実に戻りました。詳細はテキスト領域で表示されます。 –

+0

それはうまくいきませんでした。明らかに、テキスト領域に入力されたテキストをピックアップしています。 –

0

あなたの許可には:トピックのフィールドがありません。これは処理されていない理由です。

def task_params 
    params.require(:task).permit(:detail, :topic) 
end 
+0

Cristobalさん、ありがとうございました。昨日、それを最初から見始めてから考え出しました。 –

関連する問題