1

シリアライズを使用する上で、かなり基本的なことが明らかに欠けています。いくつかの配列とハッシュをデータベース レコードに保存しようとしています。これは、コントローラーの他のさまざまなレコードから取得します。それらをページにリストして保存する前に確認し、作成アクションの非表示フィールドに投稿します。ページビューで使用する場合、それらは間違いなくハッシュと配列です。ただし、何らかの理由でエスケープ文字列として保存されます。コード例は次のとおりです。

モデル:

class Bulletin < ActiveRecord::Base
  serialize :news
  attr_accessible :news
end

意見:

<%= form_for(@bulletin) do |f| %>
  <%= f.hidden_field :news %>
  <%= f.submit "Create bulletin", class: "btn btn-large btn-primary" %>
<% end %>

コントローラ:

...
def new
  @bulletin = Bulletin.new
  create_news
  ...
end
def create
  @bulletin = Bulletin.new(params[:bulletin])
  ...
end
...
private
  def create_news
  ...
  if @bulletin.news == []
    @bulletin.news = [["No news", "No news submitted this week."]]
  end
end

私は文字通り、あなたがそれを手に入れるための最小限のコードをそこに含めました. たとえば、create news 関数には、ニュースのネストされた配列が存在する場合に実際に生成するコードがさらにあります。

serialize :news, Arrayまた、私は持っていましたが、「属性は配列であるはずでしたが、文字列でした」というエラーが発生したことにも注意してください。

追加するために編集-

生成された HTML (つまり、入力):

<input id="bulletin_news" name="bulletin[news]" type="hidden" value="[[&quot;Bulletin User&quot;, &quot;A whole lot of news.&quot;], [&quot;Bulletin User&quot;, &quot;A whole lot of news.&quot;]]" />

これらは、テスト データベースから取得され、ネストされた配列に結合された値のペアです。それ以外にもたくさんありますが、読みやすくするために省略しています。

コンソールからレコードを照会したときの出力:

"[[\"Bulletin User\", \"A whole lot of news.\"], [\"Bulletin User\", \"A whole lot of news.\"], [\"Another User\", \"A whole lot of news.\"], [\"Mr. Jovany Murazik\", \"A whole lot of news.\"]]"
4

0 に答える 0