0

これは初心者の質問です!

モデルアクションを保存するにはどうすればよいですか。コントローラーに保存しようとすると、params [:action]がアクションコントローラーによって取得されます。

これが私のコントローラーです:

def viewTask()
  @id = params[:id]
  @task = Task.find(@id)
  @status = Status.find(@task.status_id)
  @actions = Action.where("task_id = #{@id}")
  @action = Action.new


  if params[:action]
    @action = Action.new(:message => params[:action], :task_id => @id)
    @action.save
  end
end

これが私の見解です:

<%= form_for :action do |a| %>
  <%= a.text_area :message, :cols => 10, :rows => 5 %>
  <%= a.submit 'ok', :class=> "btn" %>
<% end %>

みんな、ありがとう。

4

1 に答える 1

0

この回答はコメントのようなものですが、質問の内容がわかりにくいので、これを回答にすることにしました。


さあ、フェルナンド、あなたが何をしようとしているのか、どうやって知ることができますか? フォームを送信するアクションは何ですか? アクション フォームがコントローラ アクションにどのように送信されるかがわかるように、routes.rb を見せていただけますか。おそらく、レールの命名規則の問題を避けるために、Actionモデルとコントローラーの名前を や などに変更する必要がありMissionますActivity

paramsハッシュはどのように見えるべきですか? 常に params[:action] があるため、フォームの場合は通常createorupdateです。

さらに、組み込みの Rails メソッドを使用してみてください。

# should be a POST method (am I right?)
# why do you call it viewTask?

def viewTask
  @task = Task.find(params[:id])
  # you'd better avoid extra DB-calls
  # @status = @task.status
  # @activities = @task.actions

  # you can load this with the @task-query by including or joining them
  # if you need the @status and @activities models you could do 
  # @task = Task.find(params[:id], :include => [:task, :activities]) 

  # if you only need the joined objects you should use
  @task = Task.find(params[:id], :joins => [:task, :activities]) 

  @activity = Activity.new

  if params[:activity]
    @activity = @task.activities.build(params[:activity])
    @activity.save
  end
end

コードでは、タスクモデルが次のようになっていると想定しています。

class Task < ActiveRecord::Base
  has_many     :activities
  belongs_to   :status        # so it has a field called :status_id
  .....
end
于 2012-07-02T21:49:12.133 に答える