Как сохранить несколько полей в одном столбце базы данных, используя рельсы - PullRequest
0 голосов
/ 12 июля 2011

Я хочу хранить несколько вопросов и ответов с уникальным идентификатором игрока в одном столбце базы данных.

Столбец базы данных player_answer должен выглядеть как -

player_id | вопрос | ответить

1 | Индия | Нью-Дели

1 | США | Вашингтон, округ Колумбия

1 | Великобритания | Лондон

.. и так далее и тому подобное.

Это мой /views/player_answers/_form.html.erb

<%= form_for(@player_answer) do |f| %>
  <% if @player_answer.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@player_answer.errors.count, "error") %> prohibited this player_answer from being saved:</h2>

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

  <div class="field">
    <%= f.label :player_id %><br />
    <%= f.text_field :player_id, :readonly => true, :value => Player.find(params[:playerid]).id %>
    <!--<#%= f.text_field :player_id %>-->
  </div>

<% (1..10).each do |i| puts i %>

<table>
  <tr>

    <td>
  <div class="field">

    <%= f.label :question_id %><br />
    <%= f.text_field :question_id %>

  </div>
    </td>
    <td>
  <div class="field">
    <%= f.label :answer %><br />
    <%= f.text_field :answer, :readonly => true, :value => params[:playeranswerid].to_i %>
  </div>
      </td>

  </tr>
</table>


<% end  %>


  <div class="field">
    <%= f.label :answer_after_self_scoring %><br />
    <%= f.text_field :answer_after_self_scoring %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

А вот мой код файла player_answers_controller.rb- класс PlayerAnswersController

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @player_answers }
end

конец

# GET / player_answers / 1 # GET /player_answers/1.xml Def Show @player_answer = PlayerAnswer.find (params [: id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @player_answer }
end

конец

# GET / player_answers / new # GET /player_answers/new.xml Def New @player_answer = PlayerAnswer.new

respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @player_answer }
end

конец

# GET / player_answers / 1 / edit Def Edit @player_answer = PlayerAnswer.find (params [: id]) конец

# POST / player_answers # POST /player_answers.xml Def Create @player_answer = PlayerAnswer.new (params [: player_answer])

respond_to do |format|
  if @player_answer.save
    format.html { redirect_to(@player_answer, :notice => 'Player answer was successfully created.') }
    format.xml  { render :xml => @player_answer, :status => :created, :location => @player_answer }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @player_answer.errors, :status => :unprocessable_entity }
  end
end

конец

# PUT / player_answers / 1 # PUT /player_answers/1.xml обновление по умолчанию @player_answer = PlayerAnswer.find (params [: id])

respond_to do |format|
  if @player_answer.update_attributes(params[:player_answer])
    format.html { redirect_to(@player_answer, :notice => 'Player answer was successfully updated.') }
    format.xml  { head :ok }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @player_answer.errors, :status => :unprocessable_entity }
  end
end

конец

# DELETE / player_answers / 1 # DELETE /player_answers/1.xml Def Destroy @player_answer = PlayerAnswer.find (params [: id]) @ Player_answer.destroy

respond_to do |format|
  format.html { redirect_to(player_answers_url) }
  format.xml  { head :ok }
end

конец конец

Пожалуйста, дайте мне знать, как решить эту проблему.

P.s. Я только начал использовать рельсы, и это, вероятно, первый проект, над которым я работаю вживую. Пожалуйста, помогите !!

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Если вы хотите добавить несколько данных в один столбец, используйте 'serialize'.

Это будет хранить все как Hash или Array, как вы предпочитаете.

См. Документ здесь:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

0 голосов
/ 12 июля 2011

из вашего вопроса не ясно, что у вас проблемы с

вы получаете ошибку, когда пытаетесь создать новые записи с тем же player_id?если это так - убедитесь, что player_id не имеет индекса uniq или не является первичным ключом

для создания таблицы / модели для вашего макета, попробуйте это:

script/generate migration create_player_answers player_id:integer question:string answer:string

или rais generate - как вы этого не делалиукажите, какую версию рельсов вы используете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...