Учебное пособие по проблемам с rails

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я работаю над учебным пособием по Rails, в котором я все еще новичок. Приложение предназначено для простого отображения сообщений о статусе, сопоставимых с Facebook. В какой-то момент я, должно быть, что-то пропустил и не могу понять, где. По сути, содержимое статуса больше не отображается для меня.

Вот индекс:

 <div class='page-header'>
    <h1>All of the Statuses</h1>
</div>

<%= link_to "Post a New Status", new_status_path, class: 'btn btn-success' %>

<% @statuses.each do |status| %>
<div class='status'>
    <strong>Name</strong>
        <p><%= status.content %></p>
    <div class='meta'>
        <%= link_to time_ago_in_words(status.created_at)   " ago", status %>
        <span class='admin'>
                | <%= link_to "Edit", edit_status_path(status) %> |
            <%= link_to "Delete", status, method: :delete, data: {confirm: 'Are you sure?'} %>
        </span>
    </div>
</div>
<% end %>
 

Вот форма:

 <%= simple_form_for(@status, html: {class: 'form-horizontal'}) do |f| %>
  <% if @status.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@status.errors.count, "error") %> prohibited this status from being saved:</h2>

      <ul>
      <% @status.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.input :content %>
  <div class="form-actions">
     <%= f.button :submit %>
  </div>
<% end %>
 

status.content не отображается вообще, и я не могу понять, почему. Пожалуйста, дайте мне знать, если мне не удалось включить файл, я не хотел включать кучу ненужного кода.

Спасибо!

Контроллер:

 class StatusesController < ApplicationController
  before_action :set_status, only: [:show, :edit, :update, :destroy]

  # GET /statuses
  # GET /statuses.json
  def index
    @statuses = Status.all
  end

  # GET /statuses/1
  # GET /statuses/1.json
  def show
  end

  # GET /statuses/new
  def new
    @status = Status.new
  end

  # GET /statuses/1/edit
  def edit
  end

  # POST /statuses
  # POST /statuses.json
  def create
    @status = Status.new(status_params)

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

  # PATCH/PUT /statuses/1
  # PATCH/PUT /statuses/1.json
  def update
    respond_to do |format|
      if @status.update(status_params)
        format.html { redirect_to @status, notice: 'Status was successfully updated.' }
        format.json { render :show, status: :ok, location: @status }
      else
        format.html { render :edit }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /statuses/1
  # DELETE /statuses/1.json
  def destroy
    @status.destroy
    respond_to do |format|
      format.html { redirect_to statuses_url, notice: 'Status was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_status
      @status = Status.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def status_params
      params.require(:status).permit(:name, :content)
    end
end
 

Войдите в систему с терминала (я думаю, это оно?)

 Started POST "/statuses" for 127.0.0.1 at 2014-06-27 11:47:14 -0700
Processing by StatusesController#create as HTML
  Parameters: {"utf8"=>"✓",     "authenticity_token"=>"0e4j7GRZXbUSMcf hOe69gJzjPnpRT/24p5W4T9/ccA=", "status"=>    {"content"=>"New status test"}, "commit"=>"Create Status"}
WARNING: Can't mass-assign protected attributes for Status: content
    app/controllers/statuses_controller.rb:27:in `create'
   (0.1ms)  begin transaction
  SQL (0.7ms)  INSERT INTO "statuses" ("created_at", "updated_at") VALUES (?, ?)      [["created_at", "2014-06-27 18:47:14.783419"], ["updated_at", "2014-06-27    18:47:14.783419"]]
   (1.0ms)  commit transaction
Redirected to http://0.0.0.0:3000/statuses/9
Completed 302 Found in 11ms (ActiveRecord: 1.8ms)
 

Модель состояния:

 class Status < ActiveRecord::Base
end
 

Комментарии:

1. Опубликуйте свой код контроллера. А также получаете ли вы какие-либо ошибки?

2. Только что добавлен контроллер статусов. И нет, не получил никаких ошибок. Он просто не отображается. Не уверен, что он не сохраняется или просто не отображается.

3. Можете ли вы проверить элемент и проверить, видите ли вы какое-либо значение.

4. Попробуйте добавить эту строку attr_accessible :content в свою Status модель и проверьте

5. Прекрасно! Это сделало это! Я начал понимать, что это какая-то разница между версией, используемой в учебнике, и той, которую использую я. Большое вам спасибо за помощь в решении проблемы!

Ответ №1:

Вы должны добавлять attr_accessible :content в свою Status модель, чтобы массово назначать атрибуты.

 class Status < ActiveRecord::Base

attr_accessible :content

end
 

Если вам нужно отобразить name атрибут вместе с content , измените его на attr_accessible :name, :content .