Rails 4,使用link_to更新模型属性

时间:2016-01-19 21:53:53

标签: ruby-on-rails ruby-on-rails-4 model controller link-to

希望有人可以帮助解决这个问题。

我有2个控制器/模型:(1)用户有很多(2)评论。评论属于用户。

我想在视图中使用link_to简单地更新Review模型中的flag属性。如果用户单击“标记”链接,它会将模型“评论”中的模型属性“标记”更新/修补为整数“1”。

这样的东西?

<%= link_to 'Flag', [review.user, review.flag], method: :put, data: { confirm: 'Are you sure?' } %>

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

<强> reviews_controller.rb

resources :reviews do
 patch :flag, on: :member #reviews/1/flag
end

<强>的routes.rb

<%= link_to "Flag", flag_review_path(review), method: :patch,  data: { confirm: 'Are you sure?' }%>

<强>评论/ show.html.erb

class Review < ActiveRecord::Base

 def flag!
  update_attribute(:flag, 1)
  #If you don't want callbacks or validations use this
  #update_columns(:flag, 1)
 end
end

<强>模型/ review.rb

updateWithSubject

希望这有帮助!

更新:会员应为:会员。

答案 1 :(得分:0)

您的reviews_controller.rb方法应如下所示:

before_action :set_review, only: [:show, :edit, :update, :destroy, :put]

def put
    @review.update(flag: 1)
end

private
    def set_review
        @review = Review.find(params[:id])
    end
end

假设您在架构中将标志设置为整数。

答案 2 :(得分:0)

Rails link_to助手可以做到这一点。诀窍在于指定查询参数。如果将数组作为URL传递,则可以这样实现:

<%= link_to 'Flag', [review, { review: { flag: 1 } }], method: :patch, data: { confirm: 'Are you sure?' } %>

这将导致这样的请求:

Started PATCH "/reviews/123?review%5Bflag%5D=1"
Processing by ReviewsController#update as 
  Parameters: {"review"=>{"flag"=>"1"}, "id"=>"123"}

您还可以使用生成的URL帮助器方法来实现同一目的:

<%= link_to 'Flag', review_path(review, review: { flag: 1 }), method: :patch, data: { confirm: 'Are you sure?' } %>